diff options
| author | Bradley Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-11-13 15:52:27 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-13 15:52:27 -0500 |
| commit | 2b776a5d94b5c11fd2998e07a3d294f506ad094d (patch) | |
| tree | 65df34c4ec7d2bb1d70c6b794cb7c1460190a549 | |
| parent | 588eef64d261dbc375eec05bfc2a011b92ceb5c5 (diff) | |
| parent | dd4ff896dbd188762bcadede367552544d08a860 (diff) | |
Merge pull request #1179 from BradLewis/fix/struct-using-with-parens
Correctly resolve struct usings that are paren exprs
| -rw-r--r-- | src/server/symbol.odin | 6 | ||||
| -rw-r--r-- | tests/hover_test.odin | 16 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/server/symbol.odin b/src/server/symbol.odin index b6239da..2869e5c 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -543,7 +543,11 @@ expand_usings :: proc(ast_context: ^AstContext, b: ^SymbolStructValueBuilder) { append(&b.usings, u) derived := field_expr.derived - if ptr, ok := field_expr.derived.(^ast.Pointer_Type); ok { + if param, ok := derived.(^ast.Paren_Expr); ok { + derived = param.expr.derived + } + + if ptr, ok := derived.(^ast.Pointer_Type); ok { (ptr.elem != nil) or_continue derived = ptr.elem.derived } diff --git a/tests/hover_test.odin b/tests/hover_test.odin index 6ecfbd9..a24f448 100644 --- a/tests/hover_test.odin +++ b/tests/hover_test.odin @@ -5612,6 +5612,22 @@ ast_hover_local_proc_docs :: proc(t: ^testing.T) { } test.expect_hover(t, &source, "test.foo :: proc()\n foo doc") } + +@(test) +ast_hover_struct_using_with_parentheses :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + Foo :: struct { + using bar: (struct { a: int }), + } + main :: proc() { + foo: Foo + foo.a{*} + } + `, + } + test.expect_hover(t, &source, "Foo.a: int") +} /* Waiting for odin fix |