diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/analysis.odin | 17 | ||||
| -rw-r--r-- | src/server/collector.odin | 4 | ||||
| -rw-r--r-- | src/server/completion.odin | 8 | ||||
| -rw-r--r-- | src/server/symbol.odin | 2 |
4 files changed, 16 insertions, 15 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 06d1fd3..ffafa46 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -1941,12 +1941,7 @@ expand_struct_usings :: proc( field_expr: ^ast.Expr - for name, i in value.names { - - if name == k && v { - field_expr = value.types[i] - } - } + field_expr = value.types[k] if field_expr == nil { continue @@ -2959,16 +2954,17 @@ make_symbol_struct_from_ast :: proc( names := make([dynamic]string, ast_context.allocator) types := make([dynamic]^ast.Expr, ast_context.allocator) - usings := make(map[string]bool, 0, ast_context.allocator) + usings := make(map[int]bool, 0, ast_context.allocator) ranges := make([dynamic]common.Range, 0, ast_context.allocator) for field in v.fields.list { for n in field.names { if identifier, ok := n.derived.(^ast.Ident); ok && field.type != nil { - if identifier.name == "_" { - continue + if .Using in field.flags { + usings[len(types)] = true } + append(&names, identifier.name) if v.poly_params != nil { append( @@ -2978,9 +2974,6 @@ make_symbol_struct_from_ast :: proc( } else { append(&types, field.type) } - if .Using in field.flags { - usings[identifier.name] = true - } append( &ranges, diff --git a/src/server/collector.odin b/src/server/collector.odin index d17f567..6dcfa53 100644 --- a/src/server/collector.odin +++ b/src/server/collector.odin @@ -157,7 +157,7 @@ collect_struct_fields :: proc( ) -> SymbolStructValue { names := make([dynamic]string, 0, collection.allocator) types := make([dynamic]^ast.Expr, 0, collection.allocator) - usings := make(map[string]bool, 0, collection.allocator) + usings := make(map[int]bool, 0, collection.allocator) ranges := make([dynamic]common.Range, 0, collection.allocator) for field in struct_type.fields.list { @@ -174,7 +174,7 @@ collect_struct_fields :: proc( append(&types, cloned) if .Using in field.flags { - usings[names[len(names) - 1]] = true + usings[len(names) - 1] = true } append(&ranges, common.get_token_range(n, file.src)) diff --git a/src/server/completion.odin b/src/server/completion.odin index fa7d206..4111a79 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -235,6 +235,10 @@ get_comp_lit_completion :: proc( #partial switch v in comp_symbol.value { case SymbolStructValue: for name, i in v.names { + if name == "_" { + continue + } + ast_context.current_package = comp_symbol.pkg if resolved, ok := resolve_type_expression( @@ -504,6 +508,10 @@ get_selector_completion :: proc( list.isIncomplete = false for name, i in v.names { + if name == "_" { + continue + } + if selector.pkg != "" { ast_context.current_package = selector.pkg } else { diff --git a/src/server/symbol.odin b/src/server/symbol.odin index e6a21c3..3cba7ae 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -20,7 +20,7 @@ SymbolStructValue :: struct { names: []string, ranges: []common.Range, types: []^ast.Expr, - usings: map[string]bool, + usings: map[int]bool, poly: ^ast.Field_List, } |