| ... | ... | @@ -483,9 +483,23 @@ fn renderExpression( |
| 483 | 483 | }, |
| 484 | 484 | |
| 485 | 485 | ast.Node.PrefixOp.Op.ArrayType => |array_index| { |
| 486 | | try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.None); // [ |
| 487 | | try renderExpression(allocator, stream, tree, indent, start_col, array_index, Space.None); |
| 488 | | try renderToken(tree, stream, tree.nextToken(array_index.lastToken()), indent, start_col, Space.None); // ] |
| 486 | const lbracket = prefix_op_node.op_token; |
| 487 | const rbracket = tree.nextToken(array_index.lastToken()); |
| 488 | |
| 489 | try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [ |
| 490 | |
| 491 | const starts_with_comment = tree.tokens.at(lbracket + 1).id == .LineComment; |
| 492 | const ends_with_comment = tree.tokens.at(rbracket - 1).id == .LineComment; |
| 493 | const new_indent = if (ends_with_comment) indent + indent_delta else indent; |
| 494 | const new_space = if (ends_with_comment) Space.Newline else Space.None; |
| 495 | try renderExpression(allocator, stream, tree, new_indent, start_col, array_index, new_space); |
| 496 | if (starts_with_comment) { |
| 497 | try stream.writeByte('\n'); |
| 498 | } |
| 499 | if (ends_with_comment or starts_with_comment) { |
| 500 | try stream.writeByteNTimes(' ', indent); |
| 501 | } |
| 502 | try renderToken(tree, stream, rbracket, indent, start_col, Space.None); // ] |
| 489 | 503 | }, |
| 490 | 504 | ast.Node.PrefixOp.Op.BitNot, |
| 491 | 505 | ast.Node.PrefixOp.Op.BoolNot, |
| ... | ... | @@ -580,7 +594,18 @@ fn renderExpression( |
| 580 | 594 | |
| 581 | 595 | try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None); |
| 582 | 596 | try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [ |
| 583 | | try renderExpression(allocator, stream, tree, indent, start_col, index_expr, Space.None); |
| 597 | |
| 598 | const starts_with_comment = tree.tokens.at(lbracket + 1).id == .LineComment; |
| 599 | const ends_with_comment = tree.tokens.at(rbracket - 1).id == .LineComment; |
| 600 | const new_indent = if (ends_with_comment) indent + indent_delta else indent; |
| 601 | const new_space = if (ends_with_comment) Space.Newline else Space.None; |
| 602 | try renderExpression(allocator, stream, tree, new_indent, start_col, index_expr, new_space); |
| 603 | if (starts_with_comment) { |
| 604 | try stream.writeByte('\n'); |
| 605 | } |
| 606 | if (ends_with_comment or starts_with_comment) { |
| 607 | try stream.writeByteNTimes(' ', indent); |
| 608 | } |
| 584 | 609 | return renderToken(tree, stream, rbracket, indent, start_col, space); // ] |
| 585 | 610 | }, |
| 586 | 611 | |
| ... | ... | @@ -615,7 +640,7 @@ fn renderExpression( |
| 615 | 640 | |
| 616 | 641 | if (field_inits.len == 0) { |
| 617 | 642 | try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None); |
| 618 | | try renderToken(tree, stream, lbrace, indent, start_col, Space.None); |
| 643 | try renderToken(tree, stream, lbrace, indent + indent_delta, start_col, Space.None); |
| 619 | 644 | return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); |
| 620 | 645 | } |
| 621 | 646 | |
| ... | ... | @@ -714,7 +739,7 @@ fn renderExpression( |
| 714 | 739 | try renderToken(tree, stream, lbrace, indent, start_col, Space.None); |
| 715 | 740 | return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); |
| 716 | 741 | } |
| 717 | | if (exprs.len == 1) { |
| 742 | if (exprs.len == 1 and tree.tokens.at(exprs.at(0).*.lastToken() + 1).id == .RBrace) { |
| 718 | 743 | const expr = exprs.at(0).*; |
| 719 | 744 | |
| 720 | 745 | try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None); |
| ... | ... | @@ -775,7 +800,7 @@ fn renderExpression( |
| 775 | 800 | while (it.next()) |expr| : (i += 1) { |
| 776 | 801 | counting_stream.bytes_written = 0; |
| 777 | 802 | var dummy_col: usize = 0; |
| 778 | | try renderExpression(allocator, &counting_stream.stream, tree, 0, &dummy_col, expr.*, Space.None); |
| 803 | try renderExpression(allocator, &counting_stream.stream, tree, indent, &dummy_col, expr.*, Space.None); |
| 779 | 804 | const width = @intCast(usize, counting_stream.bytes_written); |
| 780 | 805 | const col = i % row_size; |
| 781 | 806 | column_widths[col] = std.math.max(column_widths[col], width); |
| ... | ... | @@ -1191,8 +1216,8 @@ fn renderExpression( |
| 1191 | 1216 | }); |
| 1192 | 1217 | |
| 1193 | 1218 | const src_params_trailing_comma = blk: { |
| 1194 | | const maybe_comma = tree.prevToken(rparen); |
| 1195 | | break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma; |
| 1219 | const maybe_comma = tree.tokens.at(rparen - 1).id; |
| 1220 | break :blk maybe_comma == .Comma or maybe_comma == .LineComment; |
| 1196 | 1221 | }; |
| 1197 | 1222 | |
| 1198 | 1223 | if (!src_params_trailing_comma) { |