diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-07-15 13:44:48 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-07-15 13:44:48 -0400 |
| commit | ba460eeccf68bf7585bf4f51aa10654ba78d7877 (patch) | |
| tree | bce1f289a5a2454a446c732a8750c661e187602a /src/server/hover.odin | |
| parent | 428b54c588ba00c84b60ed5d24cec1b264fa5589 (diff) | |
Consolidate resolving proc param names
Diffstat (limited to 'src/server/hover.odin')
| -rw-r--r-- | src/server/hover.odin | 69 |
1 files changed, 24 insertions, 45 deletions
diff --git a/src/server/hover.odin b/src/server/hover.odin index 4843391..f23bc23 100644 --- a/src/server/hover.odin +++ b/src/server/hover.odin @@ -213,44 +213,27 @@ get_hover_information :: proc(document: ^Document, position: common.Position) -> } } } + } - if position_context.call != nil { - // Check if we're resolving the name of a parameter being passed to a proc call - if call, ok := position_context.call.derived.(^ast.Call_Expr); ok { - if proc_symbol, ok := resolve_type_expression(&ast_context, call); ok { - if value, ok := proc_symbol.value.(SymbolProcedureValue); ok { - for arg in call.args { - if field_value, ok := arg.derived.(^ast.Field_Value); ok { - if position_in_node(field_value.field, position_context.position) { - if identifier, ok := field_value.field.derived.(^ast.Ident); ok { - if arg_type, arg_type_ok := get_proc_arg_type_from_name(value, identifier.name); ok { - if symbol, ok := resolve_type_expression(&ast_context, arg_type.type); ok { - symbol.range = common.get_token_range(field_value.field, ast_context.file.src) - symbol.type_name = symbol.name - symbol.type_pkg = symbol.pkg - symbol.pkg = proc_symbol.name - symbol.name = identifier.name - symbol.signature = get_signature(&ast_context, symbol) - hover.contents = write_hover_content(&ast_context, symbol) - return hover, true, true - } - } + if position_context.field_value != nil && position_in_node(position_context.field_value.field, position_context.position) { + if position_context.comp_lit != nil { + if comp_symbol, ok := resolve_comp_literal(&ast_context, &position_context); ok { + if field, ok := position_context.field_value.field.derived.(^ast.Ident); ok { + if position_in_node(field, position_context.position) { + if v, ok := comp_symbol.value.(SymbolStructValue); ok { + for name, i in v.names { + if name == field.name { + if symbol, ok := resolve_type_expression(&ast_context, v.types[i]); ok { + symbol.name = name + symbol.pkg = comp_symbol.name + symbol.signature = node_to_string(v.types[i]) + hover.contents = write_hover_content(&ast_context, symbol) + return hover, true, true } } - break } } - } - } - } - } - } - - if position_context.field_value != nil && position_context.comp_lit != nil { - if comp_symbol, ok := resolve_comp_literal(&ast_context, &position_context); ok { - if field, ok := position_context.field_value.field.derived.(^ast.Ident); ok { - if position_in_node(field, position_context.position) { - if v, ok := comp_symbol.value.(SymbolStructValue); ok { + } else if v, ok := comp_symbol.value.(SymbolBitFieldValue); ok { for name, i in v.names { if name == field.name { if symbol, ok := resolve_type_expression(&ast_context, v.types[i]); ok { @@ -263,21 +246,17 @@ get_hover_information :: proc(document: ^Document, position: common.Position) -> } } } - } else if v, ok := comp_symbol.value.(SymbolBitFieldValue); ok { - for name, i in v.names { - if name == field.name { - if symbol, ok := resolve_type_expression(&ast_context, v.types[i]); ok { - symbol.name = name - symbol.pkg = comp_symbol.name - symbol.signature = node_to_string(v.types[i]) - hover.contents = write_hover_content(&ast_context, symbol) - return hover, true, true - } - } - } } } } + + if position_context.call != nil { + if symbol, ok := resolve_type_location_proc_param_name(&ast_context, &position_context); ok { + symbol.signature = get_signature(&ast_context, symbol) + hover.contents = write_hover_content(&ast_context, symbol) + return hover, true, true + } + } } if position_context.selector != nil && |