diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-08 22:02:43 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-10 15:14:59 -0400 |
| commit | 772c41211fe5051c405831e4992eaab54ed4ac7c (patch) | |
| tree | 8bde26f9d59bfdb495544f763cc2a1ab55609250 /src/server | |
| parent | 2c4c80e9f2d3c13c1b38c7266f89045aafd3bf32 (diff) | |
Enrich hover for proc group definitions by providing the definitions for the grouped procedures
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/hover.odin | 2 | ||||
| -rw-r--r-- | src/server/signature.odin | 70 |
2 files changed, 45 insertions, 27 deletions
diff --git a/src/server/hover.odin b/src/server/hover.odin index 17cb07b..3c602c1 100644 --- a/src/server/hover.odin +++ b/src/server/hover.odin @@ -34,7 +34,7 @@ write_hover_content :: proc(ast_context: ^AstContext, symbol: Symbol) -> MarkupC } } - build_procedure_symbol_signature(&symbol) + build_procedure_symbol_signature(&symbol, false) cat := concatenate_symbol_information(ast_context, symbol, false) diff --git a/src/server/signature.odin b/src/server/signature.odin index 5dd910b..da4c6ce 100644 --- a/src/server/signature.odin +++ b/src/server/signature.odin @@ -49,43 +49,61 @@ ParameterInformation :: struct { /* Lazily build the signature and returns from ast.Nodes */ -build_procedure_symbol_signature :: proc(symbol: ^Symbol) { +build_procedure_symbol_signature :: proc(symbol: ^Symbol, short_signature := true) { if value, ok := symbol.value.(SymbolProcedureValue); ok { builder := strings.builder_make(context.temp_allocator) + write_procedure_symbol_signature(&builder, &value) + symbol.signature = strings.to_string(builder) + } else if value, ok := symbol.value.(SymbolAggregateValue); ok { + if short_signature { + symbol.signature = "proc" + return + } - strings.write_string(&builder, "proc") - strings.write_string(&builder, "(") - for arg, i in value.orig_arg_types { - strings.write_string(&builder, common.node_to_string(arg)) - if i != len(value.orig_arg_types) - 1 { - strings.write_string(&builder, ", ") + builder := strings.builder_make(context.temp_allocator) + strings.write_string(&builder, "proc {\n") + for symbol in value.symbols { + if value, ok := symbol.value.(SymbolProcedureValue); ok { + fmt.sbprintf(&builder, "\t%s :: ",symbol.name) + write_procedure_symbol_signature(&builder, &value) + strings.write_string(&builder, ",\n") } } - strings.write_string(&builder, ")") + strings.write_string(&builder, "}") + symbol.signature = strings.to_string(builder) + } +} + +write_procedure_symbol_signature :: proc(sb: ^strings.Builder, value: ^SymbolProcedureValue) { + strings.write_string(sb, "proc") + strings.write_string(sb, "(") + for arg, i in value.orig_arg_types { + strings.write_string(sb, common.node_to_string(arg)) + if i != len(value.orig_arg_types) - 1 { + strings.write_string(sb, ", ") + } + } + strings.write_string(sb, ")") - if len(value.orig_return_types) != 0 { - strings.write_string(&builder, " -> ") + if len(value.orig_return_types) != 0 { + strings.write_string(sb, " -> ") - if len(value.orig_return_types) > 1 { - strings.write_string(&builder, "(") - } + if len(value.orig_return_types) > 1 { + strings.write_string(sb, "(") + } - for arg, i in value.orig_return_types { - strings.write_string(&builder, common.node_to_string(arg)) - if i != len(value.orig_return_types) - 1 { - strings.write_string(&builder, ", ") - } + for arg, i in value.orig_return_types { + strings.write_string(sb, common.node_to_string(arg)) + if i != len(value.orig_return_types) - 1 { + strings.write_string(sb, ", ") } + } - if len(value.orig_return_types) > 1 { - strings.write_string(&builder, ")") - } - } else if value.diverging { - strings.write_string(&builder, " -> !") + if len(value.orig_return_types) > 1 { + strings.write_string(sb, ")") } - symbol.signature = strings.to_string(builder) - } else if value, ok := symbol.value.(SymbolAggregateValue); ok { - symbol.signature = "proc" + } else if value.diverging { + strings.write_string(sb, " -> !") } } |