aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/analysis.odin17
-rw-r--r--src/server/collector.odin4
-rw-r--r--src/server/completion.odin8
-rw-r--r--src/server/symbol.odin2
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,
}