@@ -534,111 +534,82 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
534
534
535
535
// scan to find row size
536
536
const maybe_row_size : ? usize = blk : {
537
- var count : usize = 0 ;
537
+ var count : usize = 1 ;
538
538
var it = exprs .iterator (0 );
539
- var prev_token = (?? it .peek ()).* .lastToken () + 1 ;
540
- while (it .next ()) | expr | {
541
- const expr_last_token = expr .* .lastToken () + 1 ;
542
- const next_token = tree .tokens .at (expr_last_token + 1 );
543
- const loc = tree .tokenLocationPtr (tree .tokens .at (prev_token ).end , next_token );
544
- if (loc .line != 0 ) break :blk null ;
545
- if (next_token .id == Token .Id .LineComment ) {
546
- const trimmed = mem .trimRight (u8 , tree .tokenSlicePtr (next_token ), " " );
547
- if (trimmed .len == 2 ) {
548
- break :blk count ;
549
- } else {
550
- break :blk null ;
539
+ while (true ) {
540
+ const expr = (?? it .next ()).* ;
541
+ if (it .peek ()) | next_expr | {
542
+ const expr_last_token = expr .* .lastToken () + 1 ;
543
+ const loc = tree .tokenLocation (tree .tokens .at (expr_last_token ).end , next_expr .* .firstToken ());
544
+ if (loc .line != 0 ) break :blk count ;
545
+ count += 1 ;
546
+ } else {
547
+ const expr_last_token = expr .* .lastToken ();
548
+ const loc = tree .tokenLocation (tree .tokens .at (expr_last_token ).end , suffix_op .rtoken );
549
+ if (loc .line == 0 ) {
550
+ // all on one line
551
+ const src_has_trailing_comma = trailblk : {
552
+ const maybe_comma = tree .prevToken (suffix_op .rtoken );
553
+ break :trailblk tree .tokens .at (maybe_comma ).id == Token .Id .Comma ;
554
+ };
555
+ if (src_has_trailing_comma ) {
556
+ break :blk 1 ; // force row size 1
557
+ } else {
558
+ break :blk null ; // no newlines
559
+ }
551
560
}
561
+ break :blk count ;
552
562
}
553
- prev_token = expr_last_token ;
554
- count += 1 ;
555
563
}
556
- break :blk null ;
557
564
};
558
565
559
-
560
566
if (maybe_row_size ) | row_size | {
561
567
const new_indent = indent + indent_delta ;
562
568
try renderToken (tree , stream , lbrace , new_indent , Space .Newline );
563
569
try stream .writeByteNTimes (' ' , new_indent );
564
570
565
571
var it = exprs .iterator (0 );
566
- var i : usize = 0 ;
572
+ var i : usize = 1 ;
567
573
while (it .next ()) | expr | {
568
574
if (it .peek ()) | next_expr | {
569
575
try renderExpression (allocator , stream , tree , new_indent , expr .* , Space .None );
570
576
571
577
const comma = tree .nextToken (expr .* .lastToken ());
572
578
573
579
if (i != row_size ) {
574
- try renderToken (tree , stream , comma , new_indent , Space .IgnoreEmptyComment ); // ,
580
+ try renderToken (tree , stream , comma , new_indent , Space .Space ); // ,
575
581
i += 1 ;
576
582
continue ;
577
583
}
578
- i = 0 ;
579
-
580
- try renderToken (tree , stream , comma , new_indent , Space .NoIndent ); // ,
584
+ i = 1 ;
581
585
582
- const next_token = tree .tokens .at (comma + 1 );
583
- if (next_token .id != Token .Id .LineComment ) {
584
- try stream .print (" //\n " );
585
- }
586
+ try renderToken (tree , stream , comma , new_indent , Space .Newline ); // ,
586
587
587
588
try renderExtraNewline (tree , stream , next_expr .* );
588
589
try stream .writeByteNTimes (' ' , new_indent );
589
- } else if (i == row_size ) {
590
- try renderTrailingCommaAndEmptyComment (allocator , stream , tree , new_indent , expr .* ); // , //
591
590
} else {
592
591
try renderTrailingComma (allocator , stream , tree , new_indent , expr .* , Space .Newline ); // ,
593
592
}
594
593
}
595
594
try stream .writeByteNTimes (' ' , indent );
596
595
try renderToken (tree , stream , suffix_op .rtoken , indent , space );
597
596
return ;
598
- }
599
-
600
- const src_has_trailing_comma = blk : {
601
- const maybe_comma = tree .prevToken (suffix_op .rtoken );
602
- break :blk tree .tokens .at (maybe_comma ).id == Token .Id .Comma ;
603
- };
604
- if (! src_has_trailing_comma ) {
597
+ } else {
605
598
try renderToken (tree , stream , lbrace , indent , Space .Space );
606
599
var it = exprs .iterator (0 );
607
600
while (it .next ()) | expr | {
608
- try renderExpression (allocator , stream , tree , indent , expr .* , Space .None );
609
-
610
601
if (it .peek ()) | next_expr | {
602
+ try renderExpression (allocator , stream , tree , indent , expr .* , Space .None );
611
603
const comma = tree .nextToken (expr .* .lastToken ());
612
604
try renderToken (tree , stream , comma , indent , Space .Space ); // ,
605
+ } else {
606
+ try renderExpression (allocator , stream , tree , indent , expr .* , Space .Space );
613
607
}
614
608
}
615
609
616
610
try renderToken (tree , stream , suffix_op .rtoken , indent , space );
617
611
return ;
618
612
}
619
-
620
- const new_indent = indent + indent_delta ;
621
- try renderToken (tree , stream , lbrace , new_indent , Space .Newline );
622
- try stream .writeByteNTimes (' ' , new_indent );
623
-
624
- var it = exprs .iterator (0 );
625
- while (it .next ()) | expr | {
626
-
627
- if (it .peek ()) | next_expr | {
628
- try renderExpression (allocator , stream , tree , new_indent , expr .* , Space .None );
629
-
630
- const comma = tree .nextToken (expr .* .lastToken ());
631
- try renderToken (tree , stream , comma , new_indent , Space .Newline ); // ,
632
-
633
- try renderExtraNewline (tree , stream , next_expr .* );
634
- try stream .writeByteNTimes (' ' , new_indent );
635
- } else {
636
- try renderTrailingComma (allocator , stream , tree , new_indent , expr .* , Space .Newline );
637
- }
638
- }
639
-
640
- try stream .writeByteNTimes (' ' , indent );
641
- try renderToken (tree , stream , suffix_op .rtoken , indent , space );
642
613
},
643
614
}
644
615
},
0 commit comments