aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2025-04-05 21:25:10 +0200
committerDanielGavin <danielgavin5@hotmail.com>2025-04-05 21:25:10 +0200
commite47febd40ed0e71aed6bb6bdc4fdce2fe6c2e8fc (patch)
treeed46f337db4adc44921c6ed797dfa7f9fce2d903
parent07a6d481cba5a417ec92dd7518f1f82b73f131c9 (diff)
Fix issues with renaming
-rw-r--r--src/server/file_resolve.odin9
-rw-r--r--tests/references_test.odin121
2 files changed, 48 insertions, 82 deletions
diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin
index a8fa894..c8ca4e7 100644
--- a/src/server/file_resolve.odin
+++ b/src/server/file_resolve.odin
@@ -194,7 +194,10 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) {
symbol = symbol,
}
}
+ }
+ if _, ok := n.expr.derived.(^ast.Selector_Expr); ok {
+ resolve_node(n.expr, data)
}
} else {
if symbol, ok := resolve_type_expression(data.ast_context, &n.node); ok {
@@ -203,10 +206,12 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) {
symbol = symbol,
}
}
+
+ resolve_node(n.expr, data)
+ resolve_node(n.field, data)
}
- resolve_node(n.expr, data)
- resolve_node(n.field, data)
+
case ^Field_Value:
data.position_context.field_value = n
diff --git a/tests/references_test.odin b/tests/references_test.odin
index c07e8cf..8c7c422 100644
--- a/tests/references_test.odin
+++ b/tests/references_test.odin
@@ -21,18 +21,8 @@ reference_variables_in_function :: proc(t: ^testing.T) {
t,
&source,
{
- {
- range = {
- start = {line = 3, character = 3},
- end = {line = 3, character = 4},
- },
- },
- {
- range = {
- start = {line = 4, character = 12},
- end = {line = 4, character = 13},
- },
- },
+ {range = {start = {line = 3, character = 3}, end = {line = 3, character = 4}}},
+ {range = {start = {line = 4, character = 12}, end = {line = 4, character = 13}}},
},
)
}
@@ -50,14 +40,7 @@ reference_variables_in_function_parameters :: proc(t: ^testing.T) {
test.expect_reference_locations(
t,
&source,
- {
- {
- range = {
- start = {line = 1, character = 22},
- end = {line = 1, character = 23},
- },
- },
- },
+ {{range = {start = {line = 1, character = 22}, end = {line = 1, character = 23}}}},
)
}
@@ -80,18 +63,8 @@ reference_selectors_in_function :: proc(t: ^testing.T) {
t,
&source,
{
- {
- range = {
- start = {line = 2, character = 3},
- end = {line = 2, character = 4},
- },
- },
- {
- range = {
- start = {line = 7, character = 6},
- end = {line = 7, character = 7},
- },
- },
+ {range = {start = {line = 2, character = 3}, end = {line = 2, character = 4}}},
+ {range = {start = {line = 7, character = 6}, end = {line = 7, character = 7}}},
},
)
}
@@ -121,18 +94,8 @@ reference_field_comp_lit :: proc(t: ^testing.T) {
t,
&source,
{
- {
- range = {
- start = {line = 2, character = 3},
- end = {line = 2, character = 17},
- },
- },
- {
- range = {
- start = {line = 11, character = 11},
- end = {line = 11, character = 25},
- },
- },
+ {range = {start = {line = 2, character = 3}, end = {line = 2, character = 17}}},
+ {range = {start = {line = 11, character = 11}, end = {line = 11, character = 25}}},
},
)
}
@@ -159,18 +122,8 @@ reference_field_comp_lit_infer_from_function :: proc(t: ^testing.T) {
t,
&source,
{
- {
- range = {
- start = {line = 2, character = 3},
- end = {line = 2, character = 17},
- },
- },
- {
- range = {
- start = {line = 10, character = 23},
- end = {line = 10, character = 37},
- },
- },
+ {range = {start = {line = 2, character = 3}, end = {line = 2, character = 17}}},
+ {range = {start = {line = 10, character = 23}, end = {line = 10, character = 37}}},
},
)
}
@@ -197,18 +150,8 @@ reference_field_comp_lit_infer_from_return :: proc(t: ^testing.T) {
t,
&source,
{
- {
- range = {
- start = {line = 2, character = 3},
- end = {line = 2, character = 17},
- },
- },
- {
- range = {
- start = {line = 10, character = 18},
- end = {line = 10, character = 32},
- },
- },
+ {range = {start = {line = 2, character = 3}, end = {line = 2, character = 17}}},
+ {range = {start = {line = 10, character = 18}, end = {line = 10, character = 32}}},
},
)
}
@@ -241,18 +184,36 @@ reference_enum_field_infer_from_assignment :: proc(t: ^testing.T) {
t,
&source,
{
- {
- range = {
- start = {line = 2, character = 3},
- end = {line = 2, character = 6},
- },
- },
- {
- range = {
- start = {line = 15, character = 14},
- end = {line = 15, character = 17},
- },
- },
+ {range = {start = {line = 2, character = 3}, end = {line = 2, character = 6}}},
+ {range = {start = {line = 15, character = 14}, end = {line = 15, character = 17}}},
+ },
+ )
+}
+
+
+@(test)
+reference_struct_field :: proc(t: ^testing.T) {
+ source := test.Source {
+ main = `package test
+ Mouse :: struct {
+ x, y: f32,
+ }
+
+ mouse: Mouse
+
+ random_procedure :: proc(x, y: f32) {
+ mouse.x += x{*}
+ mouse.y += y
+ }
+ `,
+ }
+
+ test.expect_reference_locations(
+ t,
+ &source,
+ {
+ {range = {start = {line = 8, character = 14}, end = {line = 8, character = 15}}},
+ {range = {start = {line = 7, character = 27}, end = {line = 7, character = 28}}},
},
)
}