diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-09 09:33:50 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-09 10:14:20 -0400 |
| commit | 46ca826ae4379ef3f2a61639bceee5a2390d6914 (patch) | |
| tree | 00df2b3688b7f7dc10d2305f965b30d828cbccab /src | |
| parent | c4dfd07a0537041556d7c074ebea60987ffc3d2b (diff) | |
Improve reference handling for variables part of selector expr
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/file_resolve.odin | 3 | ||||
| -rw-r--r-- | src/server/references.odin | 10 |
2 files changed, 4 insertions, 9 deletions
diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin index dd2eabb..4e2ce5d 100644 --- a/src/server/file_resolve.odin +++ b/src/server/file_resolve.odin @@ -196,7 +196,8 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) { } } - if _, ok := n.expr.derived.(^ast.Selector_Expr); ok { + #partial switch v in n.expr.derived { + case ^ast.Selector_Expr, ^ast.Index_Expr: resolve_node(n.expr, data) } } else { diff --git a/src/server/references.odin b/src/server/references.odin index 944a337..b62efee 100644 --- a/src/server/references.odin +++ b/src/server/references.odin @@ -136,13 +136,7 @@ prepare_references :: proc( resolve_flag = .Field } else if position_context.selector_expr != nil { - resolve_flag = .Field - - base: ^ast.Ident - base, ok = position_context.selector.derived.(^ast.Ident) - - if position_in_node(base, position_context.position) && position_context.identifier != nil && ok { - + if position_in_node(position_context.selector, position_context.position) && position_context.identifier != nil { ident := position_context.identifier.derived.(^ast.Ident) symbol, ok = resolve_location_identifier(ast_context, ident^) @@ -151,7 +145,7 @@ prepare_references :: proc( return } - resolve_flag = .Base + resolve_flag = .Identifier } else { symbol, ok = resolve_location_selector(ast_context, position_context.selector_expr) |