aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-07-07 16:50:09 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-07-07 19:42:04 -0400
commit19bfa8d510d2d9b5b553fd473b9682bec25b1818 (patch)
tree242482bc1f2358be19966e5dfcd94fa1ee40c6c2 /src
parentaacea4ab65367e73fe31452981486038beb101e0 (diff)
Fix issue resolving references for implicit selectors
Diffstat (limited to 'src')
-rw-r--r--src/server/analysis.odin35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index c1d3038..bcd572c 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -1885,7 +1885,6 @@ resolve_implicit_selector :: proc(
Symbol,
bool,
) {
-
if position_context.call != nil {
if call, ok := position_context.call.derived.(^ast.Call_Expr); ok {
parameter_index, parameter_ok := find_position_in_call_param(position_context, call^)
@@ -1897,7 +1896,7 @@ resolve_implicit_selector :: proc(
return resolve_type_expression(ast_context, proc_value.arg_types[parameter_index].type)
} else if enum_value, ok := symbol.value.(SymbolEnumValue); ok {
- return symbol, true
+ return symbol, ok
}
}
}
@@ -1906,15 +1905,13 @@ resolve_implicit_selector :: proc(
if position_context.assign != nil && len(position_context.assign.lhs) == len(position_context.assign.rhs) {
for _, i in position_context.assign.lhs {
if position_in_node(position_context.assign.rhs[i], position_context.position) {
- return resolve_type_expression(ast_context, position_context.assign.lhs[i])
+ if symbol, ok := resolve_type_expression(ast_context, position_context.assign.lhs[i]); ok {
+ return symbol, ok
+ }
}
}
}
- if position_context.switch_stmt != nil {
- return resolve_type_expression(ast_context, position_context.switch_stmt.cond)
- }
-
if position_context.binary != nil {
if position_in_node(position_context.binary.left, position_context.position) {
return resolve_type_expression(ast_context, position_context.binary.right)
@@ -1946,19 +1943,21 @@ resolve_implicit_selector :: proc(
}
}
- if position_context.comp_lit != nil && position_context.parent_comp_lit.type != nil {
- if position_context.field_value == nil {
- return {}, false
- }
- field_name, ok := get_field_value_name(position_context.field_value)
- if !ok {
- return {}, false
+ if position_context.comp_lit != nil && position_context.parent_comp_lit != nil && position_context.parent_comp_lit.type != nil {
+ if position_context.field_value != nil {
+ if field_name, ok := get_field_value_name(position_context.field_value); ok {
+ if symbol, ok := resolve_type_expression(ast_context, position_context.parent_comp_lit.type); ok {
+ return resolve_implicit_selector_comp_literal(
+ ast_context, position_context, symbol, field_name,
+ )
+ }
+ }
}
+ }
- if symbol, ok := resolve_type_expression(ast_context, position_context.parent_comp_lit.type); ok {
- return resolve_implicit_selector_comp_literal(
- ast_context, position_context, symbol, field_name,
- )
+ if position_context.switch_stmt != nil {
+ if symbol, ok := resolve_type_expression(ast_context, position_context.switch_stmt.cond); ok {
+ return symbol, ok
}
}