diff options
| -rw-r--r-- | src/server/analysis.odin | 26 | ||||
| -rw-r--r-- | tests/hover_test.odin | 14 |
2 files changed, 33 insertions, 7 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index aa19e56..f724345 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -2744,13 +2744,25 @@ resolve_type_location_proc_param_name :: proc( reset_ast_context(ast_context) if value, ok := call_symbol.value.(SymbolProcedureValue); ok { - if symbol, ok := resolve_type_expression(ast_context, position_context.field_value.value); ok { - symbol.type_pkg = symbol.pkg - symbol.type_name = symbol.name - symbol.pkg = call_symbol.name - symbol.name = ident.name - symbol.type = .Field - return symbol, true + for arg in value.arg_types { + for name_expr in arg.names { + if name, ok := name_expr.derived.(^ast.Ident); ok { + if name.name == ident.name { + type := arg.type + if type == nil { + type = arg.default_value + } + if symbol, ok := resolve_type_expression(ast_context, type); ok { + symbol.type_pkg = symbol.pkg + symbol.type_name = symbol.name + symbol.pkg = call_symbol.name + symbol.name = ident.name + symbol.type = .Field + return symbol, true + } + } + } + } } } return call_symbol, false diff --git a/tests/hover_test.odin b/tests/hover_test.odin index a24f448..52dca76 100644 --- a/tests/hover_test.odin +++ b/tests/hover_test.odin @@ -5628,6 +5628,20 @@ ast_hover_struct_using_with_parentheses :: proc(t: ^testing.T) { } test.expect_hover(t, &source, "Foo.a: int") } + +@(test) +ast_hover_named_proc_arg_hover :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + foo :: proc(bar: f32) {} + + main :: proc() { + foo(b{*}ar=42) + } + `, + } + test.expect_hover(t, &source, "foo.bar: f32") +} /* Waiting for odin fix |