aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-06-27 21:19:02 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-06-27 21:53:39 -0400
commitc8630395d0c3314c356db0cc40b4b79904909c6d (patch)
tree0bc1535342af07c6b50ba1b60ea6b2f62d797d80 /src
parent9bc4a0362e74c0d5f1ea10459fa9d7cb24d0ac9d (diff)
Improve completion struct information
Diffstat (limited to 'src')
-rw-r--r--src/server/analysis.odin2
-rw-r--r--src/server/documentation.odin43
-rw-r--r--src/server/hover.odin2
3 files changed, 26 insertions, 21 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 3798adc..9703ece 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -226,10 +226,8 @@ resolve_type_comp_literal :: proc(
return {}, nil, false
}
-
set_ast_package_set_scoped(ast_context, current_symbol.pkg)
-
for elem, element_index in current_comp_lit.elems {
if !position_in_node(elem, position_context.position) {
continue
diff --git a/src/server/documentation.odin b/src/server/documentation.odin
index 265c9d9..663d32a 100644
--- a/src/server/documentation.odin
+++ b/src/server/documentation.odin
@@ -1,6 +1,7 @@
package server
import "core:fmt"
+import "core:log"
import path "core:path/slashpath"
import "core:strings"
@@ -11,7 +12,6 @@ get_signature :: proc(ast_context: ^AstContext, symbol: Symbol) -> string {
}
is_variable := symbol.type == .Variable
- is_field := symbol.type == .Field
pointer_prefix := repeat("^", symbol.pointers, context.temp_allocator)
@@ -21,6 +21,7 @@ get_signature :: proc(ast_context: ^AstContext, symbol: Symbol) -> string {
builder := strings.builder_make(ast_context.allocator)
if is_variable {
append_variable_full_name(&builder, ast_context, symbol, pointer_prefix)
+ strings.write_string(&builder, " :: ")
}
strings.write_string(&builder, "enum {\n")
for i in 0 ..< len(v.names) {
@@ -34,17 +35,7 @@ get_signature :: proc(ast_context: ^AstContext, symbol: Symbol) -> string {
builder := strings.builder_make(ast_context.allocator)
if is_variable {
append_variable_full_name(&builder, ast_context, symbol, pointer_prefix)
- } else if is_field {
- pkg_name := get_pkg_name(ast_context, symbol.type_pkg)
- if pkg_name == "" {
- fmt.sbprintf(&builder, "%s%s", pointer_prefix, symbol.type_name)
- } else {
- fmt.sbprintf(&builder, "%s%s.%s", pointer_prefix, pkg_name, symbol.type_name)
- }
- if symbol.comment != "" {
- fmt.sbprintf(&builder, " %s", symbol.comment)
- }
- return strings.to_string(builder)
+ strings.write_string(&builder, " :: ")
} else if symbol.type_name != "" {
if symbol.type_pkg == "" {
fmt.sbprintf(&builder, "%s%s :: ", pointer_prefix, symbol.type_name)
@@ -55,6 +46,9 @@ get_signature :: proc(ast_context: ^AstContext, symbol: Symbol) -> string {
}
if len(v.names) == 0 {
strings.write_string(&builder, "struct {}")
+ if symbol.comment != "" {
+ fmt.sbprintf(&builder, " %s", symbol.comment)
+ }
return strings.to_string(builder)
}
write_struct_hover(ast_context, &builder, v)
@@ -63,6 +57,7 @@ get_signature :: proc(ast_context: ^AstContext, symbol: Symbol) -> string {
builder := strings.builder_make(ast_context.allocator)
if is_variable {
append_variable_full_name(&builder, ast_context, symbol, pointer_prefix)
+ strings.write_string(&builder, " :: ")
}
strings.write_string(&builder, "union {\n")
for i in 0 ..< len(v.types) {
@@ -95,7 +90,6 @@ get_short_signature :: proc(ast_context: ^AstContext, symbol: Symbol) -> string
}
is_variable := symbol.type == .Variable
- is_field := symbol.type == .Field
pointer_prefix := repeat("^", symbol.pointers, context.temp_allocator)
@@ -117,8 +111,9 @@ get_short_signature :: proc(ast_context: ^AstContext, symbol: Symbol) -> string
builder := strings.builder_make(ast_context.allocator)
if is_variable {
append_variable_full_name(&builder, ast_context, symbol, pointer_prefix)
+ } else {
+ strings.write_string(&builder, "enum")
}
- strings.write_string(&builder, "enum")
return strings.to_string(builder)
case SymbolMapValue:
return strings.concatenate(
@@ -139,15 +134,27 @@ get_short_signature :: proc(ast_context: ^AstContext, symbol: Symbol) -> string
builder := strings.builder_make(ast_context.allocator)
if is_variable {
append_variable_full_name(&builder, ast_context, symbol, pointer_prefix)
+ } else if symbol.type_name != "" {
+ pkg_name := get_pkg_name(ast_context, symbol.type_pkg)
+ if pkg_name == "" {
+ fmt.sbprintf(&builder, "%s%s", pointer_prefix, symbol.type_name)
+ } else {
+ fmt.sbprintf(&builder, "%s%s.%s", pointer_prefix, pkg_name, symbol.type_name)
+ }
+ } else {
+ strings.write_string(&builder, "struct")
+ }
+ if symbol.comment != "" {
+ fmt.sbprintf(&builder, " %s", symbol.comment)
}
- strings.write_string(&builder, "struct")
return strings.to_string(builder)
case SymbolUnionValue:
builder := strings.builder_make(ast_context.allocator)
if is_variable {
append_variable_full_name(&builder, ast_context, symbol, pointer_prefix)
+ } else {
+ strings.write_string(&builder, "union")
}
- strings.write_string(&builder, "union")
return strings.to_string(builder)
case SymbolBitFieldValue:
if is_variable {
@@ -302,10 +309,10 @@ append_variable_full_name :: proc(
) {
pkg_name := get_symbol_pkg_name(ast_context, symbol)
if pkg_name == "" {
- fmt.sbprintf(sb, "%s%s :: ", pointer_prefix, symbol.name)
+ fmt.sbprintf(sb, "%s%s", pointer_prefix, symbol.name)
return
}
- fmt.sbprintf(sb, "%s%s.%s :: ", pointer_prefix, pkg_name, symbol.name)
+ fmt.sbprintf(sb, "%s%s.%s", pointer_prefix, pkg_name, symbol.name)
return
}
diff --git a/src/server/hover.odin b/src/server/hover.odin
index f8b73e9..52663a8 100644
--- a/src/server/hover.odin
+++ b/src/server/hover.odin
@@ -144,7 +144,7 @@ get_hover_information :: proc(document: ^Document, position: common.Position) ->
}
}
- symbol.signature = get_signature(&ast_context, symbol)
+ symbol.signature = get_short_signature(&ast_context, symbol)
hover.contents = write_hover_content(&ast_context, symbol)
return hover, true, true
}