aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/type_definition.odin14
-rw-r--r--tests/type_definition_test.odin27
2 files changed, 34 insertions, 7 deletions
diff --git a/src/server/type_definition.odin b/src/server/type_definition.odin
index db0b587..7ad9c26 100644
--- a/src/server/type_definition.odin
+++ b/src/server/type_definition.odin
@@ -103,13 +103,6 @@ get_type_definition_locations :: proc(document: ^Document, position: common.Posi
}
}
- if position_context.comp_lit != nil {
- if symbol, ok := resolve_location_comp_literal(&ast_context, &position_context); ok {
- append_symbol_to_locations(&locations, document, symbol)
- return locations[:], true
- }
- }
-
if position_context.call != nil {
if call, ok := position_context.call.derived.(^ast.Call_Expr); ok {
if !position_in_exprs(call.args, position_context.position) {
@@ -258,5 +251,12 @@ get_type_definition_locations :: proc(document: ^Document, position: common.Posi
}
}
+ if position_context.comp_lit != nil {
+ if symbol, ok := resolve_location_comp_literal(&ast_context, &position_context); ok {
+ append_symbol_to_locations(&locations, document, symbol)
+ return locations[:], true
+ }
+ }
+
return {}, false
}
diff --git a/tests/type_definition_test.odin b/tests/type_definition_test.odin
index c08df88..3e818bf 100644
--- a/tests/type_definition_test.odin
+++ b/tests/type_definition_test.odin
@@ -983,3 +983,30 @@ ast_type_definition_comp_lit_variable :: proc (t: ^testing.T) {
test.expect_type_definition_locations(t, &source, locations[:])
}
+
+@(test)
+ast_type_definition_variable_in_comp_lit :: proc (t: ^testing.T) {
+ source := test.Source {
+ main = `package test
+
+ Foo :: struct{}
+
+ Bar :: struct {
+ foo: Foo,
+ }
+
+ main :: proc() {
+ foo := Foo{}
+ bar := Bar {
+ foo = fo{*}o,
+ }
+ }
+ `,
+ }
+
+ locations := []common.Location {
+ {range = {start = {line = 2, character = 2}, end = {line = 2, character = 5}}},
+ }
+
+ test.expect_type_definition_locations(t, &source, locations[:])
+}