aboutsummaryrefslogtreecommitdiff
path: root/src/server/documentation.odin
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-21 09:26:17 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-21 09:26:17 -0400
commit405e8ede2eaf2fbccb6ffbaa6b24a434665b056d (patch)
tree94260d847a212263ea5c4303f16fb4748921bca5 /src/server/documentation.odin
parentee22998e6e8beec8e3926c9c6b1a0dbd99b3d6db (diff)
Improve comp lit hover formatting
Diffstat (limited to 'src/server/documentation.odin')
-rw-r--r--src/server/documentation.odin51
1 files changed, 33 insertions, 18 deletions
diff --git a/src/server/documentation.odin b/src/server/documentation.odin
index 47c6d7e..965e331 100644
--- a/src/server/documentation.odin
+++ b/src/server/documentation.odin
@@ -779,29 +779,44 @@ write_node :: proc(
symbol = make_symbol_procedure_from_ast(ast_context, nil, n^, name, {}, true, .None, nil)
ok = true
case ^ast.Comp_Lit:
- build_string(n.type, sb, false)
- if len(n.elems) == 0 {
- strings.write_string(sb, "{}")
- return
+ same_line := true
+ start_line := -1
+ for elem in n.elems {
+ if start_line == -1 {
+ start_line = elem.pos.line
+ } else if start_line != elem.pos.line {
+ same_line = false
+ break
+ }
}
- if n.type != nil {
- strings.write_string(sb, " {\n")
+ if same_line {
+ build_string(n, sb, false)
} else {
- strings.write_string(sb, "{\n")
- }
-
- for elem, i in n.elems {
- write_indent(sb, depth)
- if field, ok := elem.derived.(^ast.Field_Value); ok {
- build_string(field.field, sb, false)
- strings.write_string(sb, " = ")
- build_string(field.value, sb, false)
+ build_string(n.type, sb, false)
+ if len(n.elems) == 0 {
+ strings.write_string(sb, "{}")
+ return
+ }
+ if n.type != nil {
+ strings.write_string(sb, " {\n")
} else {
- build_string(elem, sb, false)
+ strings.write_string(sb, "{\n")
}
- strings.write_string(sb, ",\n")
+
+ for elem, i in n.elems {
+ write_indent(sb, depth)
+ if field, ok := elem.derived.(^ast.Field_Value); ok {
+ build_string(field.field, sb, false)
+ strings.write_string(sb, " = ")
+ write_node(sb, ast_context, field.value, "", depth+1, false)
+ } else {
+ build_string(elem, sb, false)
+ }
+ strings.write_string(sb, ",\n")
+ }
+ write_indent(sb, depth-1)
+ strings.write_string(sb, "}")
}
- strings.write_string(sb, "}")
return
}
if ok {