aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-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 {