diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-08-30 20:56:42 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-08-30 21:03:39 -0400 |
| commit | a1578111de566bfc524a7f7ac0846da58a06c07b (patch) | |
| tree | 1a8fa6c41c0c22aba7582e51abe272f70dd6ee9b /src/server/collector.odin | |
| parent | e9a88954b6df0e72b19a0ec6af92e8d24a200511 (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.odin | 35 |
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) |