aboutsummaryrefslogtreecommitdiff
path: root/src/server/analysis.odin
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2023-03-08 18:27:37 +0100
committerDanielGavin <danielgavin5@hotmail.com>2023-03-08 18:27:37 +0100
commitedbc1c6ea624f7feee2dbf4804543c9329eef738 (patch)
treeabe426e3a458a7b6e524d83696c2140951880589 /src/server/analysis.odin
parent4c5b21feabb5bc6f8442c2b3c5e6d16a8f923e5a (diff)
Add support for completion with usings and compound literals
Diffstat (limited to 'src/server/analysis.odin')
-rw-r--r--src/server/analysis.odin17
1 files changed, 5 insertions, 12 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,