| ... | @@ -393,15 +393,21 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind | ... | @@ -393,15 +393,21 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind |
| 393 | var it = call_info.params.iterator(0); | 393 | var it = call_info.params.iterator(0); |
| 394 | while (true) { | 394 | while (true) { |
| 395 | const param_node = ??it.next(); | 395 | const param_node = ??it.next(); |
| 396 | try stream.writeByteNTimes(' ', new_indent); | 396 | |
| | 397 | const param_node_new_indent = if (param_node.*.id == ast.Node.Id.MultilineStringLiteral) blk: { |
| | 398 | break :blk indent; |
| | 399 | } else blk: { |
| | 400 | try stream.writeByteNTimes(' ', new_indent); |
| | 401 | break :blk new_indent; |
| | 402 | }; |
| 397 | | 403 | |
| 398 | if (it.peek()) |next_node| { | 404 | if (it.peek()) |next_node| { |
| 399 | try renderExpression(allocator, stream, tree, new_indent, param_node.*, Space.None); | 405 | try renderExpression(allocator, stream, tree, param_node_new_indent, param_node.*, Space.None); |
| 400 | const comma = tree.nextToken(param_node.*.lastToken()); | 406 | const comma = tree.nextToken(param_node.*.lastToken()); |
| 401 | try renderToken(tree, stream, comma, new_indent, Space.Newline); // , | 407 | try renderToken(tree, stream, comma, new_indent, Space.Newline); // , |
| 402 | try renderExtraNewline(tree, stream, next_node.*); | 408 | try renderExtraNewline(tree, stream, next_node.*); |
| 403 | } else { | 409 | } else { |
| 404 | try renderTrailingComma(allocator, stream, tree, new_indent, param_node.*, Space.Newline); | 410 | try renderTrailingComma(allocator, stream, tree, param_node_new_indent, param_node.*, Space.Newline); |
| 405 | try stream.writeByteNTimes(' ', indent); | 411 | try stream.writeByteNTimes(' ', indent); |
| 406 | try renderToken(tree, stream, suffix_op.rtoken, indent, space); | 412 | try renderToken(tree, stream, suffix_op.rtoken, indent, space); |
| 407 | return; | 413 | return; |
| ... | @@ -1502,7 +1508,13 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent | ... | @@ -1502,7 +1508,13 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent |
| 1502 | if (next_token.id != Token.Id.LineComment) { | 1508 | if (next_token.id != Token.Id.LineComment) { |
| 1503 | switch (space) { | 1509 | switch (space) { |
| 1504 | Space.None, Space.NoNewline, Space.NoIndent => return, | 1510 | Space.None, Space.NoNewline, Space.NoIndent => return, |
| 1505 | Space.Newline => return stream.write("\n"), | 1511 | Space.Newline => { |
| | 1512 | if (next_token.id == Token.Id.MultilineStringLiteralLine) { |
| | 1513 | return; |
| | 1514 | } else { |
| | 1515 | return stream.write("\n"); |
| | 1516 | } |
| | 1517 | }, |
| 1506 | Space.Space => return stream.writeByte(' '), | 1518 | Space.Space => return stream.writeByte(' '), |
| 1507 | Space.NoComment => unreachable, | 1519 | Space.NoComment => unreachable, |
| 1508 | } | 1520 | } |
| ... | @@ -1526,7 +1538,13 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent | ... | @@ -1526,7 +1538,13 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent |
| 1526 | }; | 1538 | }; |
| 1527 | try stream.writeByteNTimes(' ', next_line_indent); | 1539 | try stream.writeByteNTimes(' ', next_line_indent); |
| 1528 | }, | 1540 | }, |
| 1529 | Space.Newline, Space.NoIndent => try stream.write("\n"), | 1541 | Space.Newline, Space.NoIndent => { |
| | 1542 | if (next_token.id == Token.Id.MultilineStringLiteralLine) { |
| | 1543 | return; |
| | 1544 | } else { |
| | 1545 | return stream.write("\n"); |
| | 1546 | } |
| | 1547 | }, |
| 1530 | Space.NoNewline => {}, | 1548 | Space.NoNewline => {}, |
| 1531 | Space.NoComment => unreachable, | 1549 | Space.NoComment => unreachable, |
| 1532 | } | 1550 | } |
| ... | @@ -1547,7 +1565,13 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent | ... | @@ -1547,7 +1565,13 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent |
| 1547 | next_token = tree.tokens.at(token_index + offset); | 1565 | next_token = tree.tokens.at(token_index + offset); |
| 1548 | if (next_token.id != Token.Id.LineComment) { | 1566 | if (next_token.id != Token.Id.LineComment) { |
| 1549 | switch (space) { | 1567 | switch (space) { |
| 1550 | Space.Newline, Space.NoIndent => try stream.writeByte('\n'), | 1568 | Space.Newline, Space.NoIndent => { |
| | 1569 | if (next_token.id == Token.Id.MultilineStringLiteralLine) { |
| | 1570 | return; |
| | 1571 | } else { |
| | 1572 | return stream.write("\n"); |
| | 1573 | } |
| | 1574 | }, |
| 1551 | Space.None, Space.Space => { | 1575 | Space.None, Space.Space => { |
| 1552 | try stream.writeByte('\n'); | 1576 | try stream.writeByte('\n'); |
| 1553 | | 1577 | |