aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-17 19:20:48 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-21 08:55:41 -0400
commita498379ca16e1e0fc344c654a7e24710f8be77b6 (patch)
tree2f76bcce5da9cbb02c8f3413551678b7210e1336 /src/server
parenta79efd27be8e6951aaa5b7e4bd785121e857c32c (diff)
Try to display value for const global variables
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin3
-rw-r--r--src/server/ast.odin4
-rw-r--r--src/server/documentation.odin24
-rw-r--r--src/server/symbol.odin2
4 files changed, 22 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 {