| ... | ... | @@ -427,9 +427,23 @@ fn renderExpression( |
| 427 | 427 | }, |
| 428 | 428 | |
| 429 | 429 | ast.Node.PrefixOp.Op.ArrayType => |array_index| { |
| 430 | | try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.None); // [ |
| 431 | | try renderExpression(allocator, stream, tree, indent, start_col, array_index, Space.None); |
| 432 | | try renderToken(tree, stream, tree.nextToken(array_index.lastToken()), indent, start_col, Space.None); // ] |
| 430 | const lbracket = prefix_op_node.op_token; |
| 431 | const rbracket = tree.nextToken(array_index.lastToken()); |
| 432 | |
| 433 | try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [ |
| 434 | |
| 435 | const starts_with_comment = tree.tokens.at(lbracket + 1).id == .LineComment; |
| 436 | const ends_with_comment = tree.tokens.at(rbracket - 1).id == .LineComment; |
| 437 | const new_indent = if (ends_with_comment) indent + indent_delta else indent; |
| 438 | const new_space = if (ends_with_comment) Space.Newline else Space.None; |
| 439 | try renderExpression(allocator, stream, tree, new_indent, start_col, array_index, new_space); |
| 440 | if (starts_with_comment) { |
| 441 | try stream.writeByte('\n'); |
| 442 | } |
| 443 | if (ends_with_comment or starts_with_comment) { |
| 444 | try stream.writeByteNTimes(' ', indent); |
| 445 | } |
| 446 | try renderToken(tree, stream, rbracket, indent, start_col, Space.None); // ] |
| 433 | 447 | }, |
| 434 | 448 | ast.Node.PrefixOp.Op.BitNot, |
| 435 | 449 | ast.Node.PrefixOp.Op.BoolNot, |
| ... | ... | @@ -524,7 +538,18 @@ fn renderExpression( |
| 524 | 538 | |
| 525 | 539 | try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None); |
| 526 | 540 | try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [ |
| 527 | | try renderExpression(allocator, stream, tree, indent, start_col, index_expr, Space.None); |
| 541 | |
| 542 | const starts_with_comment = tree.tokens.at(lbracket + 1).id == .LineComment; |
| 543 | const ends_with_comment = tree.tokens.at(rbracket - 1).id == .LineComment; |
| 544 | const new_indent = if (ends_with_comment) indent + indent_delta else indent; |
| 545 | const new_space = if (ends_with_comment) Space.Newline else Space.None; |
| 546 | try renderExpression(allocator, stream, tree, new_indent, start_col, index_expr, new_space); |
| 547 | if (starts_with_comment) { |
| 548 | try stream.writeByte('\n'); |
| 549 | } |
| 550 | if (ends_with_comment or starts_with_comment) { |
| 551 | try stream.writeByteNTimes(' ', indent); |
| 552 | } |
| 528 | 553 | return renderToken(tree, stream, rbracket, indent, start_col, space); // ] |
| 529 | 554 | }, |
| 530 | 555 | |
| ... | ... | @@ -559,7 +584,7 @@ fn renderExpression( |
| 559 | 584 | |
| 560 | 585 | if (field_inits.len == 0) { |
| 561 | 586 | try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None); |
| 562 | | try renderToken(tree, stream, lbrace, indent, start_col, Space.None); |
| 587 | try renderToken(tree, stream, lbrace, indent + indent_delta, start_col, Space.None); |
| 563 | 588 | return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); |
| 564 | 589 | } |
| 565 | 590 | |
| ... | ... | @@ -2019,7 +2044,7 @@ fn renderTokenOffset( |
| 2019 | 2044 | |
| 2020 | 2045 | const after_comment_token = tree.tokens.at(token_index + offset); |
| 2021 | 2046 | const next_line_indent = switch (after_comment_token.id) { |
| 2022 | | Token.Id.RParen, Token.Id.RBrace, Token.Id.RBracket => indent - indent_delta, |
| 2047 | Token.Id.RParen, Token.Id.RBrace, Token.Id.RBracket => if (indent > indent_delta) indent - indent_delta else 0, |
| 2023 | 2048 | else => indent, |
| 2024 | 2049 | }; |
| 2025 | 2050 | try stream.writeByteNTimes(' ', next_line_indent); |