aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-07 21:58:23 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-07 22:21:33 -0400
commita3ebb67fd1893881a7e88021341f712461fc3a79 (patch)
tree8c779ada9aacd5516fbd3c48bbe53e5cdbfc256c /src/server
parent19ee061feef6f74b54a4ca5e36a8e3711907935b (diff)
Parse fields correctly
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin4
-rw-r--r--src/server/semantic_tokens.odin2
2 files changed, 6 insertions, 0 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 22324f4..04c5f9e 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -2644,6 +2644,7 @@ resolve_container_allocator_location :: proc(ast_context: ^AstContext, container
for name, i in v.names {
if name == "allocator" {
symbol.range = v.ranges[i]
+ symbol.type = .Field
return symbol, true
}
}
@@ -2690,18 +2691,21 @@ resolve_symbol_selector :: proc(
for name, i in v.names {
if strings.compare(name, field) == 0 {
symbol.range = v.ranges[i]
+ symbol.type = .EnumMember
}
}
case SymbolStructValue:
for name, i in v.names {
if strings.compare(name, field) == 0 {
symbol.range = v.ranges[i]
+ symbol.type = .Field
}
}
case SymbolBitFieldValue:
for name, i in v.names {
if strings.compare(name, field) == 0 {
symbol.range = v.ranges[i]
+ symbol.type = .Field
}
}
case SymbolPackageValue:
diff --git a/src/server/semantic_tokens.odin b/src/server/semantic_tokens.odin
index 703a0cb..7d6b653 100644
--- a/src/server/semantic_tokens.odin
+++ b/src/server/semantic_tokens.odin
@@ -564,6 +564,8 @@ visit_ident :: proc(
}
case .EnumMember:
write_semantic_node(builder, ident, .EnumMember, modifiers)
+ case .Field:
+ write_semantic_node(builder, ident, .Property, modifiers)
case:
/* type idents */
switch v in symbol.value {