aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamian Tarnawski <gthetarnav@gmail.com>2024-04-27 22:53:13 +0200
committerDamian Tarnawski <gthetarnav@gmail.com>2024-04-27 22:53:13 +0200
commit9623d701e92725401a221da9cca0e33d1a8a4635 (patch)
tree9479084daa208f359afb151ab4676e141010b6cf
parent0ca38c9f44b47c87ae9e810087eabec0f01c0d9c (diff)
Fix getting wrong symbol for selectors
-rw-r--r--src/server/semantic_tokens.odin9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/server/semantic_tokens.odin b/src/server/semantic_tokens.odin
index bd95d48..d2240f8 100644
--- a/src/server/semantic_tokens.odin
+++ b/src/server/semantic_tokens.odin
@@ -219,7 +219,7 @@ visit_node :: proc(node: ^ast.Node, builder: ^SemanticTokenBuilder) {
case ^Ellipsis:
visit_node(n.expr, builder)
case ^Ident:
- visit_ident(n, {}, builder)
+ visit_ident(n, n, {}, builder)
case ^Selector_Expr:
visit_selector(cast(^Selector_Expr)node, builder)
builder.selector = false
@@ -403,7 +403,7 @@ visit_value_decl :: proc(value_decl: ast.Value_Decl, builder: ^SemanticTokenBuil
for name in value_decl.names {
ident := name.derived.(^Ident) or_continue
- visit_ident(ident, modifiers, builder)
+ visit_ident(ident, ident, modifiers, builder)
}
visit_node(value_decl.type, builder)
@@ -498,17 +498,18 @@ visit_selector :: proc(selector: ^ast.Selector_Expr, builder: ^SemanticTokenBuil
builder.selector = true
}
- visit_ident(selector.field, {}, builder)
+ visit_ident(selector.field, selector, {}, builder)
}
visit_ident :: proc(
ident: ^ast.Ident,
+ symbol_ptr: rawptr,
modifiers: SemanticTokenModifiers,
builder: ^SemanticTokenBuilder,
) {
using ast
- symbol_and_node, in_symbols := builder.symbols[cast(uintptr)ident]
+ symbol_and_node, in_symbols := builder.symbols[cast(uintptr)symbol_ptr]
if !in_symbols {
return
}