diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-09-17 19:20:48 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-09-21 08:55:41 -0400 |
| commit | a498379ca16e1e0fc344c654a7e24710f8be77b6 (patch) | |
| tree | 2f76bcce5da9cbb02c8f3413551678b7210e1336 | |
| parent | a79efd27be8e6951aaa5b7e4bd785121e857c32c (diff) | |
Try to display value for const global variables
| -rw-r--r-- | src/server/analysis.odin | 3 | ||||
| -rw-r--r-- | src/server/ast.odin | 4 | ||||
| -rw-r--r-- | src/server/documentation.odin | 24 | ||||
| -rw-r--r-- | src/server/symbol.odin | 2 | ||||
| -rw-r--r-- | tests/hover_test.odin | 10 |
5 files changed, 32 insertions, 11 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 20c7749..684a790 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -1902,6 +1902,9 @@ resolve_global_identifier :: proc(ast_context: ^AstContext, node: ast.Ident, glo return_symbol.comment = get_comment(global.comment) } + return_symbol.type_expr = global.type_expr + return_symbol.value_expr = global.value_expr + return return_symbol, ok } diff --git a/src/server/ast.odin b/src/server/ast.odin index 91c413f..386d051 100644 --- a/src/server/ast.odin +++ b/src/server/ast.odin @@ -93,6 +93,8 @@ GlobalExpr :: struct { name: string, name_expr: ^ast.Expr, expr: ^ast.Expr, + type_expr: ^ast.Expr, + value_expr: ^ast.Expr, flags: bit_set[GlobalFlags], docs: ^ast.Comment_Group, comment: ^ast.Comment_Group, @@ -447,10 +449,12 @@ collect_value_decl :: proc( if len(value_decl.values) > i { if is_variable_declaration(value_decl.values[i]) { global_expr.flags += {.Variable} + global_expr.value_expr = value_decl.values[i] } } if value_decl.type != nil { global_expr.expr = value_decl.type + global_expr.type_expr = value_decl.type append(exprs, global_expr) } else if len(value_decl.values) > i { global_expr.expr = value_decl.values[i] diff --git a/src/server/documentation.odin b/src/server/documentation.odin index 3c75ae3..7979e5a 100644 --- a/src/server/documentation.odin +++ b/src/server/documentation.odin @@ -430,16 +430,7 @@ write_short_signature :: proc(sb: ^strings.Builder, ast_context: ^AstContext, sy strings.write_string(sb, "package") return case SymbolUntypedValue: - switch v.type { - case .Float: - strings.write_string(sb, "float") - case .String: - strings.write_string(sb, "string") - case .Bool: - strings.write_string(sb, "bool") - case .Integer: - strings.write_string(sb, "int") - } + strings.write_string(sb, v.tok.text) return case SymbolGenericValue: build_string_node(v.expr, sb, false) @@ -798,6 +789,18 @@ construct_symbol_information :: proc(ast_context: ^AstContext, symbol: Symbol) - sb := strings.builder_make(ast_context.allocator) write_symbol_attributes(&sb, symbol) write_symbol_name(&sb, symbol) + if .Mutable not_in symbol.flags { + if symbol.type_expr != nil && symbol.value_expr != nil { + strings.write_string(&sb, " : ") + build_string_node(symbol.type_expr, &sb, false) + strings.write_string(&sb, " : ") + build_string_node(symbol.value_expr, &sb, false) + return strings.to_string(sb) + } + strings.write_string(&sb, " :: ") + } else { + strings.write_string(&sb, ": ") + } if symbol.type == .Package { return strings.to_string(sb) @@ -867,7 +870,6 @@ write_symbol_name :: proc(sb: ^strings.Builder, symbol: Symbol) { fmt.sbprintf(sb, "%v.", pkg) } strings.write_string(sb, symbol.name) - strings.write_string(sb, ": ") } write_symbol_type_information :: proc(sb: ^strings.Builder, ast_context: ^AstContext, symbol: Symbol) -> bool { diff --git a/src/server/symbol.odin b/src/server/symbol.odin index dac9e7d..4e6b19f 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -225,6 +225,8 @@ Symbol :: struct { value: SymbolValue, pointers: int, //how many `^` are applied to the symbol flags: SymbolFlags, + type_expr: ^ast.Expr, + value_expr: ^ast.Expr, } SymbolType :: enum { diff --git a/tests/hover_test.odin b/tests/hover_test.odin index 323fe81..6800556 100644 --- a/tests/hover_test.odin +++ b/tests/hover_test.odin @@ -4864,6 +4864,16 @@ ast_hover_simd_array_pointer :: proc(t: ^testing.T) { } test.expect_hover(t, &source, "test.foo: ^#simd[4]f32") } + +@(test) +ast_hover_const_untyped_value :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + F{*}OO :: 123 + `, + } + test.expect_hover(t, &source, "test.FOO :: 123") +} /* Waiting for odin fix |