aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2023-05-18 18:27:01 +0200
committerDanielGavin <danielgavin5@hotmail.com>2023-05-18 18:27:01 +0200
commitfd136199897d5e5c87f6f1fbfd076ed18e41d7b7 (patch)
tree6cd01102bac07fca6d3a92a460ff6f9fc5cdb6a3 /src/server
parentfe9f96337ad673667b716889ef7ca7840416b776 (diff)
Add hover support for comp literal fields
Diffstat (limited to 'src/server')
-rw-r--r--src/server/hover.odin35
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(