diff options
| author | Bradley Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-11-02 16:32:17 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-02 16:32:17 -0500 |
| commit | 5163a1a307b920b5ba4bc26131536f97546c7052 (patch) | |
| tree | ec6df970012a7cf601202059c54f9af9a03158a1 | |
| parent | 06822469106aa36774ce26c4e75d5a3ae4c21efc (diff) | |
| parent | ee0663c69bedb74086662b53193fc99e23c00d42 (diff) | |
Merge pull request #1145 from BradLewis/fix/parapoly-typedef-returnsdev-2025-10
Add missing resolves for parapoly types
| -rw-r--r-- | src/server/symbol.odin | 9 | ||||
| -rw-r--r-- | tests/hover_test.odin | 85 |
2 files changed, 94 insertions, 0 deletions
diff --git a/src/server/symbol.odin b/src/server/symbol.odin index 4f9539d..6cf24df 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -841,6 +841,15 @@ symbol_to_expr :: proc(symbol: Symbol, file: string, allocator := context.temp_a case SymbolStructValue: type := new_type(ast.Struct_Type, pos, end, allocator) return type + case SymbolEnumValue: + type := new_type(ast.Enum_Type, pos, end, allocator) + return type + case SymbolUnionValue: + type := new_type(ast.Union_Type, pos, end, allocator) + return type + case SymbolBitSetValue: + type := new_type(ast.Bit_Set_Type, pos, end, allocator) + return type case SymbolUntypedValue: type := new_type(ast.Basic_Lit, pos, end, allocator) type.tok = v.tok diff --git a/tests/hover_test.odin b/tests/hover_test.odin index b598c24..657bc9e 100644 --- a/tests/hover_test.odin +++ b/tests/hover_test.odin @@ -5408,6 +5408,91 @@ ast_hover_loop_over_enum :: proc(t: ^testing.T) { } test.expect_hover(t, &source, "test.foo: test.Foo") } + +@(test) +ast_hover_parapoly_return_enum :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + Foo :: enum {A, B, C} + + get :: proc($T: typeid) -> T {} + + main :: proc() { + f{*}oo := get(Foo) + } + + `, + } + test.expect_hover(t, &source, "test.foo: test.Foo") +} + +@(test) +ast_hover_parapoly_return_union :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + Foo :: union {int} + + get :: proc($T: typeid) -> T {} + + main :: proc() { + f{*}oo := get(Foo) + } + + `, + } + test.expect_hover(t, &source, "test.foo: test.Foo") +} + +@(test) +ast_hover_parapoly_return_bit_set :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + Foo :: union {int} + + get :: proc($T: typeid) -> T {} + + main :: proc() { + f{*}oo := get(Foo) + } + + `, + } + test.expect_hover(t, &source, "test.foo: test.Foo") +} + +@(test) +ast_hover_parapoly_return_slice :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + Foo :: []int + + get :: proc($T: typeid) -> T {} + + main :: proc() { + f{*}oo := get(Foo) + } + + `, + } + test.expect_hover(t, &source, "test.foo: []int") +} + +@(test) +ast_hover_parapoly_return_dynamic_array :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + Foo :: [dynamic]string + + get :: proc($T: typeid) -> T {} + + main :: proc() { + f{*}oo := get(Foo) + } + + `, + } + test.expect_hover(t, &source, "test.foo: [dynamic]string") +} /* Waiting for odin fix |