diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-09-21 09:26:17 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-09-21 09:26:17 -0400 |
| commit | 405e8ede2eaf2fbccb6ffbaa6b24a434665b056d (patch) | |
| tree | 94260d847a212263ea5c4303f16fb4748921bca5 /src/server | |
| parent | ee22998e6e8beec8e3926c9c6b1a0dbd99b3d6db (diff) | |
Improve comp lit hover formatting
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/documentation.odin | 51 |
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 { |