@@ -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
+ }
0 commit comments