aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/completion.odin11
-rw-r--r--src/server/position_context.odin7
2 files changed, 4 insertions, 14 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin
index 5eb8e64..aceff60 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -96,15 +96,11 @@ get_completion_list :: proc(
}
if position_context.selector != nil {
- if _, ok := position_context.selector.derived.(^ast.Ident); ok {
- completion_type = .Selector
- } else if position_context.selector_expr != nil {
+ if position_context.selector_expr != nil {
if selector_call, ok := position_context.selector_expr.derived.(^ast.Selector_Call_Expr); ok {
if !position_in_node(selector_call.call, position_context.position) {
completion_type = .Selector
}
- } else if selector, ok := position_context.selector_expr.derived.(^ast.Selector_Expr); ok {
- completion_type = .Selector
}
} else if _, ok := position_context.selector.derived.(^ast.Implicit_Selector_Expr); !ok {
// variadic args seem to work by setting it as an implicit selector expr, in that case
@@ -1403,10 +1399,7 @@ get_implicit_completion :: proc(
}
if len(position_context.assign.lhs) > rhs_index {
- if enum_value, unwrapped_super_enum, ok := unwrap_enum(
- ast_context,
- position_context.assign.lhs[rhs_index],
- ); ok {
+ if enum_value, unwrapped_super_enum, ok := unwrap_enum(ast_context, position_context.assign.lhs[rhs_index]); ok {
for name in enum_value.names {
item := CompletionItem {
label = name,
diff --git a/src/server/position_context.odin b/src/server/position_context.odin
index 46efce2..d5e7d33 100644
--- a/src/server/position_context.odin
+++ b/src/server/position_context.odin
@@ -138,7 +138,7 @@ get_document_position_context :: proc(
position_context.parent_binary = nil
}
- if hint == .Completion {
+ if hint == .Completion && position_context.selector == nil && position_context.field == nil {
fallback_position_context_completion(document, position, &position_context)
}
@@ -649,10 +649,7 @@ get_document_position_node :: proc(node: ^ast.Node, position_context: ^DocumentP
}
}
case ^Selector_Expr:
- if position_context.hint == .Definition ||
- position_context.hint == .Hover ||
- position_context.hint == .SignatureHelp ||
- position_context.hint == .Completion {
+ if position_context.hint == .Definition || position_context.hint == .Hover && n.field != nil {
position_context.selector = n.expr
position_context.field = n.field
position_context.selector_expr = node