diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-27 21:19:02 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-27 21:53:39 -0400 |
| commit | c8630395d0c3314c356db0cc40b4b79904909c6d (patch) | |
| tree | 0bc1535342af07c6b50ba1b60ea6b2f62d797d80 /src | |
| parent | 9bc4a0362e74c0d5f1ea10459fa9d7cb24d0ac9d (diff) | |
Improve completion struct information
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/analysis.odin | 2 | ||||
| -rw-r--r-- | src/server/documentation.odin | 43 | ||||
| -rw-r--r-- | src/server/hover.odin | 2 |
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 } |