aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-06-30 13:29:35 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-07-02 07:54:29 -0400
commitb0c738ee087a57eebaa4c7626c29434a3b7fc524 (patch)
treeee417d73faa92ad9fb0d8194b725f84485d716e0 /src/server
parentb4d62b99f906bf9adb3b3cc71c9be8c374855f81 (diff)
Fix issue with struct field names being resolved as a proceeding struct
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin2
-rw-r--r--src/server/file_resolve.odin10
2 files changed, 9 insertions, 3 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 611bf4b..95c3a82 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -1717,7 +1717,7 @@ resolve_comp_literal :: proc(
symbol: Symbol,
ok: bool,
) {
- if position_context.parent_comp_lit.type != nil {
+ if position_context.parent_comp_lit != nil && position_context.parent_comp_lit.type != nil {
symbol = resolve_type_expression(ast_context, position_context.parent_comp_lit.type) or_return
} else if position_context.call != nil {
if call_expr, ok := position_context.call.derived.(^ast.Call_Expr); ok {
diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin
index ea594e3..a63161d 100644
--- a/src/server/file_resolve.odin
+++ b/src/server/file_resolve.odin
@@ -308,14 +308,20 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) {
case ^Ellipsis:
resolve_node(n.expr, data)
case ^Comp_Lit:
+ // We only want to resolve the values, not the types
+ resolve_node(n.type, data)
+
//only set this for the parent comp literal, since we will need to walk through it to infer types.
+ set := false
if data.position_context.parent_comp_lit == nil {
+ set = true
data.position_context.parent_comp_lit = n
}
+ defer if set {
+ data.position_context.parent_comp_lit = nil
+ }
data.position_context.comp_lit = n
-
- resolve_node(n.type, data)
resolve_nodes(n.elems, data)
case ^Tag_Expr:
resolve_node(n.expr, data)