| ... | ... | @@ -490,13 +490,16 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind |
| 490 | 490 | var it = exprs.iterator(0); |
| 491 | 491 | while (it.next()) |expr| { |
| 492 | 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 | 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 | 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 | 953 | try renderExpression(allocator, stream, tree, indent, payload, Space.Space); |
| 951 | 954 | } |
| 952 | 955 | |
| 953 | | // add a trailing comma if necessary |
| 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 | | } |
| 956 | try renderTrailingComma(allocator, stream, tree, indent, switch_case.expr, space); |
| 971 | 957 | }, |
| 972 | 958 | ast.Node.Id.SwitchElse => { |
| 973 | 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 | 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 | } |