aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-06-09 09:33:50 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-06-09 10:14:20 -0400
commit46ca826ae4379ef3f2a61639bceee5a2390d6914 (patch)
tree00df2b3688b7f7dc10d2305f965b30d828cbccab /src
parentc4dfd07a0537041556d7c074ebea60987ffc3d2b (diff)
Improve reference handling for variables part of selector expr
Diffstat (limited to 'src')
-rw-r--r--src/server/file_resolve.odin3
-rw-r--r--src/server/references.odin10
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)