aboutsummaryrefslogtreecommitdiff
path: root/src/server/completion.odin
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2023-09-01 21:15:32 +0200
committerDanielGavin <danielgavin5@hotmail.com>2023-09-01 21:15:32 +0200
commitcdb6f8c2d5607dac1199e31589291f73be626d5e (patch)
tree9897db3ef39a30dfb2671f8b1c83a7225742a7aa /src/server/completion.odin
parentfc2ac99e4116225921baeef6e3c658fef6b2fb97 (diff)
Fix issues with union switch and also now using the renamed package name
Diffstat (limited to 'src/server/completion.odin')
-rw-r--r--src/server/completion.odin32
1 files changed, 14 insertions, 18 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin
index 044483a..00e7b0f 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -1,18 +1,18 @@
package server
-import "core:odin/parser"
-import "core:odin/ast"
-import "core:odin/tokenizer"
import "core:fmt"
import "core:log"
-import "core:strings"
-import path "core:path/slashpath"
import "core:mem"
-import "core:strconv"
+import "core:odin/ast"
+import "core:odin/parser"
+import "core:odin/tokenizer"
+import "core:os"
import "core:path/filepath"
-import "core:sort"
+import path "core:path/slashpath"
import "core:slice"
-import "core:os"
+import "core:sort"
+import "core:strconv"
+import "core:strings"
import "shared:common"
@@ -464,7 +464,7 @@ get_selector_completion :: proc(
for type in v.types {
if symbol, ok := resolve_type_expression(ast_context, type); ok {
- base := path.base(symbol.pkg, false, context.temp_allocator)
+ base := get_symbol_pkg_name(ast_context, symbol)
item := CompletionItem {
kind = .EnumMember,
@@ -496,7 +496,7 @@ get_selector_completion :: proc(
symbol.pointers,
context.temp_allocator,
),
- path.base(symbol.pkg, false, context.temp_allocator),
+ get_symbol_pkg_name(ast_context, symbol),
common.node_to_string(type, true),
)
}
@@ -1516,6 +1516,9 @@ get_type_switch_completion :: proc(
for name in case_clause.list {
if ident, ok := name.derived.(^ast.Ident); ok {
used_unions[ident.name] = true
+ } else if selector, ok := name.derived.(^ast.Selector_Expr);
+ ok {
+ used_unions[selector.field.name] = true
}
}
}
@@ -1533,9 +1536,6 @@ get_type_switch_completion :: proc(
union_value.types[i],
); ok {
name := symbol.name
- if name in used_unions {
- continue
- }
item := CompletionItem {
kind = .EnumMember,
@@ -1559,11 +1559,7 @@ get_type_switch_completion :: proc(
symbol.pointers,
context.temp_allocator,
),
- path.base(
- symbol.pkg,
- false,
- context.temp_allocator,
- ),
+ get_symbol_pkg_name(ast_context, symbol),
name,
)
}