| ... | @@ -490,13 +490,16 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind | ... | @@ -490,13 +490,16 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind |
| 490 | var it = exprs.iterator(0); | 490 | var it = exprs.iterator(0); |
| 491 | while (it.next()) |expr| { | 491 | while (it.next()) |expr| { |
| 492 | try stream.writeByteNTimes(' ', new_indent); | 492 | try stream.writeByteNTimes(' ', new_indent); |
| 493 | try renderExpression(allocator, stream, tree, new_indent, expr.*, Space.None); | | |
| 494 | | | |
| 495 | const comma = tree.nextToken(expr.*.lastToken()); | | |
| 496 | try renderToken(tree, stream, comma, new_indent, Space.Newline); // , | | |
| 497 | | 493 | |
| 498 | if (it.peek()) |next_expr| { | 494 | if (it.peek()) |next_expr| { |
| | 495 | try renderExpression(allocator, stream, tree, new_indent, expr.*, Space.None); |
| | 496 | |
| | 497 | const comma = tree.nextToken(expr.*.lastToken()); |
| | 498 | try renderToken(tree, stream, comma, new_indent, Space.Newline); // , |
| | 499 | |
| 499 | try renderExtraNewline(tree, stream, next_expr.*); | 500 | try renderExtraNewline(tree, stream, next_expr.*); |
| | 501 | } else { |
| | 502 | try renderTrailingComma(allocator, stream, tree, indent, expr.*, Space.Newline); |
| 500 | } | 503 | } |
| 501 | } | 504 | } |
| 502 | | 505 | |
| ... | @@ -950,24 +953,7 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind | ... | @@ -950,24 +953,7 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind |
| 950 | try renderExpression(allocator, stream, tree, indent, payload, Space.Space); | 953 | try renderExpression(allocator, stream, tree, indent, payload, Space.Space); |
| 951 | } | 954 | } |
| 952 | | 955 | |
| 953 | // add a trailing comma if necessary | 956 | try renderTrailingComma(allocator, stream, tree, indent, switch_case.expr, space); |
| 954 | const end_token = switch_case.lastToken() + 1; | | |
| 955 | switch (tree.tokens.at(end_token).id) { | | |
| 956 | Token.Id.Comma => { | | |
| 957 | try renderExpression(allocator, stream, tree, indent, switch_case.expr, Space.None); | | |
| 958 | try renderToken(tree, stream, end_token, indent, space); // , | | |
| 959 | }, | | |
| 960 | Token.Id.LineComment => { | | |
| 961 | try renderExpression(allocator, stream, tree, indent, switch_case.expr, Space.NoComment); | | |
| 962 | try stream.write(", "); | | |
| 963 | try renderToken(tree, stream, end_token, indent, space); | | |
| 964 | }, | | |
| 965 | else => { | | |
| 966 | try renderExpression(allocator, stream, tree, indent, switch_case.expr, Space.None); | | |
| 967 | try stream.write(",\n"); | | |
| 968 | assert(space == Space.Newline); | | |
| 969 | }, | | |
| 970 | } | | |
| 971 | }, | 957 | }, |
| 972 | ast.Node.Id.SwitchElse => { | 958 | ast.Node.Id.SwitchElse => { |
| 973 | const switch_else = @fieldParentPtr(ast.Node.SwitchElse, "base", base); | 959 | const switch_else = @fieldParentPtr(ast.Node.SwitchElse, "base", base); |
| ... | @@ -1473,3 +1459,25 @@ fn renderDocComments(tree: &ast.Tree, stream: var, node: var, indent: usize) (@t | ... | @@ -1473,3 +1459,25 @@ fn renderDocComments(tree: &ast.Tree, stream: var, node: var, indent: usize) (@t |
| 1473 | try stream.writeByteNTimes(' ', indent); | 1459 | try stream.writeByteNTimes(' ', indent); |
| 1474 | } | 1460 | } |
| 1475 | } | 1461 | } |
| | 1462 | |
| | 1463 | fn renderTrailingComma(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, indent: usize, base: &ast.Node, |
| | 1464 | space: Space) (@typeOf(stream).Child.Error || Error)!void |
| | 1465 | { |
| | 1466 | const end_token = base.lastToken() + 1; |
| | 1467 | switch (tree.tokens.at(end_token).id) { |
| | 1468 | Token.Id.Comma => { |
| | 1469 | try renderExpression(allocator, stream, tree, indent, base, Space.None); |
| | 1470 | try renderToken(tree, stream, end_token, indent, space); // , |
| | 1471 | }, |
| | 1472 | Token.Id.LineComment => { |
| | 1473 | try renderExpression(allocator, stream, tree, indent, base, Space.NoComment); |
| | 1474 | try stream.write(", "); |
| | 1475 | try renderToken(tree, stream, end_token, indent, space); |
| | 1476 | }, |
| | 1477 | else => { |
| | 1478 | try renderExpression(allocator, stream, tree, indent, base, Space.None); |
| | 1479 | try stream.write(",\n"); |
| | 1480 | assert(space == Space.Newline); |
| | 1481 | }, |
| | 1482 | } |
| | 1483 | } |