| ... | @@ -486,6 +486,37 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind | ... | @@ -486,6 +486,37 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind |
| 486 | return; | 486 | return; |
| 487 | } | 487 | } |
| 488 | | 488 | |
| | 489 | const src_has_trailing_comma = blk: { |
| | 490 | const maybe_comma = tree.prevToken(suffix_op.rtoken); |
| | 491 | break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma; |
| | 492 | }; |
| | 493 | |
| | 494 | const src_same_line = blk: { |
| | 495 | const loc = tree.tokenLocation(tree.tokens.at(lbrace).end, suffix_op.rtoken); |
| | 496 | break :blk loc.line == 0; |
| | 497 | }; |
| | 498 | |
| | 499 | if (!src_has_trailing_comma and src_same_line) { |
| | 500 | // render all on one line, no trailing comma |
| | 501 | try renderExpression(allocator, stream, tree, indent, suffix_op.lhs, Space.None); |
| | 502 | try renderToken(tree, stream, lbrace, indent, Space.Space); |
| | 503 | |
| | 504 | var it = field_inits.iterator(0); |
| | 505 | while (it.next()) |field_init| { |
| | 506 | if (it.peek() != null) { |
| | 507 | try renderExpression(allocator, stream, tree, indent, field_init.*, Space.None); |
| | 508 | |
| | 509 | const comma = tree.nextToken(field_init.*.lastToken()); |
| | 510 | try renderToken(tree, stream, comma, indent, Space.Space); |
| | 511 | } else { |
| | 512 | try renderExpression(allocator, stream, tree, indent, field_init.*, Space.Space); |
| | 513 | } |
| | 514 | } |
| | 515 | |
| | 516 | try renderToken(tree, stream, suffix_op.rtoken, indent, space); |
| | 517 | return; |
| | 518 | } |
| | 519 | |
| 489 | try renderExpression(allocator, stream, tree, indent, suffix_op.lhs, Space.None); | 520 | try renderExpression(allocator, stream, tree, indent, suffix_op.lhs, Space.None); |
| 490 | try renderToken(tree, stream, lbrace, indent, Space.Newline); | 521 | try renderToken(tree, stream, lbrace, indent, Space.Newline); |
| 491 | | 522 | |