aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-12-06 05:42:12 -0500
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-12-06 05:42:12 -0500
commit59753fbf1f14b2aa2a211addc96730bbceef9a32 (patch)
treea1deac3120a803228317ec11c681a424f3f5ca0d
parentaa2378e8bd44f7ff5b8772802a020e47009c114b (diff)
Handle references with attributes
-rw-r--r--src/server/file_resolve.odin4
-rw-r--r--tests/references_test.odin18
2 files changed, 22 insertions, 0 deletions
diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin
index 1b7a5c5..c526030 100644
--- a/src/server/file_resolve.odin
+++ b/src/server/file_resolve.odin
@@ -463,15 +463,19 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) {
data.position_context.value_decl = n
reset_position_context(data.position_context)
+ resolve_nodes(n.attributes[:], data)
resolve_nodes(n.names, data)
resolve_node(n.type, data)
resolve_nodes(n.values, data)
case ^Package_Decl:
case ^Import_Decl:
+ resolve_nodes(n.attributes[:], data)
case ^Foreign_Block_Decl:
+ resolve_nodes(n.attributes[:], data)
resolve_node(n.foreign_library, data)
resolve_node(n.body, data)
case ^Foreign_Import_Decl:
+ resolve_nodes(n.attributes[:], data)
resolve_node(n.name, data)
case ^Proc_Group:
resolve_nodes(n.args, data)
diff --git a/tests/references_test.odin b/tests/references_test.odin
index 021033b..7bd2dcc 100644
--- a/tests/references_test.odin
+++ b/tests/references_test.odin
@@ -1520,3 +1520,21 @@ ast_references_enum_with_enumerated_array :: proc(t: ^testing.T) {
test.expect_reference_locations(t, &source, locations[:])
}
+
+@(test)
+ast_references_deferred_attributes :: proc(t: ^testing.T) {
+ source := test.Source {
+ main = `package test
+ foo :: proc() {}
+
+ @(deferred_in = fo{*}o)
+ bar :: proc() {}
+ `,
+ }
+ locations := []common.Location {
+ {range = {start = {line = 1, character = 2}, end = {line = 1, character = 5}}},
+ {range = {start = {line = 3, character = 18}, end = {line = 3, character = 21}}},
+ }
+
+ test.expect_reference_locations(t, &source, locations[:])
+}