aboutsummaryrefslogtreecommitdiff
path: root/src/server/collector.odin
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-08-30 20:56:42 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-08-30 21:03:39 -0400
commita1578111de566bfc524a7f7ac0846da58a06c07b (patch)
tree1a8fa6c41c0c22aba7582e51abe272f70dd6ee9b /src/server/collector.odin
parente9a88954b6df0e72b19a0ec6af92e8d24a200511 (diff)
Collect global comp lit fields and add them to workspace and document symbols
Diffstat (limited to 'src/server/collector.odin')
-rw-r--r--src/server/collector.odin35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/server/collector.odin b/src/server/collector.odin
index 6e0ffff..4588a39 100644
--- a/src/server/collector.odin
+++ b/src/server/collector.odin
@@ -411,6 +411,28 @@ collect_generic :: proc(
return value
}
+add_comp_lit_fields :: proc(
+ collection: ^SymbolCollection,
+ generic: ^SymbolGenericValue,
+ comp_lit_type: ^ast.Comp_Lit,
+ package_map: map[string]string,
+ file: ast.File,
+) {
+ names := make([dynamic]string, 0, len(comp_lit_type.elems), collection.allocator)
+ ranges := make([dynamic]common.Range, 0, len(comp_lit_type.elems), collection.allocator)
+ for elem in comp_lit_type.elems {
+ if field_value, ok := elem.derived.(^ast.Field_Value); ok {
+ if ident, ok := field_value.field.derived.(^ast.Ident); ok {
+ name := get_index_unique_string(collection, ident.name)
+ append(&names, name)
+ append(&ranges, common.get_token_range(field_value, file.src))
+ }
+ }
+ }
+ generic.field_names = names[:]
+ generic.ranges = ranges[:]
+}
+
collect_method :: proc(collection: ^SymbolCollection, symbol: Symbol) {
pkg := &collection.packages[symbol.pkg]
@@ -646,6 +668,19 @@ collect_symbols :: proc(collection: ^SymbolCollection, file: ast.File, uri: stri
} else {
token_type = .Unresolved
}
+ case ^ast.Comp_Lit:
+ generic := collect_generic(collection, col_expr, package_map, uri)
+
+ if expr.mutable {
+ token_type = .Variable
+ } else {
+ token_type = .Unresolved
+ }
+
+ token = expr.expr
+
+ add_comp_lit_fields(collection, &generic, v, package_map, file)
+ symbol.value = generic
case:
// default
symbol.value = collect_generic(collection, col_expr, package_map, uri)