diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2023-05-18 18:27:01 +0200 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2023-05-18 18:27:01 +0200 |
| commit | fd136199897d5e5c87f6f1fbfd076ed18e41d7b7 (patch) | |
| tree | 6cd01102bac07fca6d3a92a460ff6f9fc5cdb6a3 /src/server | |
| parent | fe9f96337ad673667b716889ef7ca7840416b776 (diff) | |
Add hover support for comp literal fields
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/hover.odin | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/server/hover.odin b/src/server/hover.odin index 635659e..2dfdee4 100644 --- a/src/server/hover.odin +++ b/src/server/hover.odin @@ -138,6 +138,39 @@ get_hover_information :: proc( } } + 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 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 = common.node_to_string( + v.types[i], + ) + hover.contents = write_hover_content( + &ast_context, + symbol, + ) + return hover, true, true + } + } + } + } + } + } + } + if position_context.selector != nil && position_context.identifier != nil { hover.range = common.get_token_range( position_context.identifier^, @@ -207,7 +240,7 @@ get_hover_information :: proc( &ast_context, v.types[i], ); ok { - symbol.name = name //TODO refractor - never set symbol name after creation - change writer_hover_content + symbol.name = name symbol.pkg = selector.name symbol.signature = common.node_to_string(v.types[i]) hover.contents = write_hover_content( |