diff --git a/src/analysis.zig b/src/analysis.zig index e0302b501..94909a645 100644 --- a/src/analysis.zig +++ b/src/analysis.zig @@ -5054,8 +5054,9 @@ pub fn getPositionContext( .test_doctest_name, .var_access, .field_access => |loc| .{ .field_access = tokenLocAppend(loc, tok) }, else => .{ .field_access = tokenLocAppend(curr_ctx.ctx.loc(tree) orelse tok.loc, tok) }, }, - .question_mark, .period_asterisk => switch (curr_ctx.ctx) { - .var_access, .field_access => |loc| .{ .field_access = tokenLocAppend(loc, tok) }, + .period_asterisk => .{ .field_access = tokenLocAppend(curr_ctx.ctx.loc(tree) orelse tok.loc, tok) }, + .question_mark => switch (curr_ctx.ctx) { + .field_access => |loc| .{ .field_access = tokenLocAppend(loc, tok) }, else => .empty, }, .colon => switch (curr_ctx.ctx) { diff --git a/tests/utility/position_context.zig b/tests/utility/position_context.zig index c78f9aae6..a55df31ab 100644 --- a/tests/utility/position_context.zig +++ b/tests/utility/position_context.zig @@ -105,6 +105,31 @@ test "var_access.nested" { , .var_access, .{ .lookahead = true }); } +test "var_access.optional" { + try testContext( + \\const foo = ? + , .empty, .{}); + try testContext( + \\const foo = ?T + , .var_access, .{}); +} + +test "var_access.pointer" { + try testContext( + \\const foo = * + , .empty, .{}); + try testContext( + \\const foo = *T + , .var_access, .{}); + + try testContext( + \\const foo = [] + , .empty, .{}); + try testContext( + \\const foo = []T + , .var_access, .{}); +} + test "var_access no lookahead" { try testContext( \\const a_var = identifier;