@@ -753,39 +753,52 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
753753 try renderToken (r , lbrace , .none );
754754 try renderIdentifier (r , lbrace + 1 , .none , .eagerly_unquote ); // identifier
755755 return renderToken (r , rbrace , space );
756- } else if (tree .tokenTag (rbrace - 1 ) == .comma ) {
757- // There is a trailing comma so render each member on a new line.
758- try ais .pushIndent (.normal );
759- try renderToken (r , lbrace , .newline );
760- var i = lbrace + 1 ;
761- while (i < rbrace ) : (i += 1 ) {
762- if (i > lbrace + 1 ) try renderExtraNewlineToken (r , i );
763- switch (tree .tokenTag (i )) {
764- .doc_comment = > try renderToken (r , i , .newline ),
765- .identifier = > {
766- try ais .pushSpace (.comma );
767- try renderIdentifier (r , i , .comma , .eagerly_unquote );
768- ais .popSpace ();
769- },
770- .comma = > {},
771- else = > unreachable ,
772- }
773- }
774- ais .popIndent ();
775- return renderToken (r , rbrace , space );
776756 } else {
777- // There is no trailing comma so render everything on one line.
778- try renderToken (r , lbrace , .space );
779- var i = lbrace + 1 ;
780- while (i < rbrace ) : (i += 1 ) {
781- switch (tree .tokenTag (i )) {
782- .doc_comment = > unreachable , // TODO
783- .identifier = > try renderIdentifier (r , i , .comma_space , .eagerly_unquote ),
784- .comma = > {},
785- else = > unreachable ,
757+ // If there is a trailing comma, comment, or document comment, then render each
758+ // item on its own line.
759+ const multi_line = tree .tokenTag (rbrace - 1 ) == .comma or
760+ hasComment (tree , lbrace , rbrace ) or
761+ blk : {
762+ var i = lbrace + 1 ;
763+ break :blk while (i < rbrace ) : (i += 1 ) {
764+ if (tree .tokenTag (i ) == .doc_comment )
765+ break true ;
766+ } else false ;
767+ };
768+
769+ if (multi_line ) {
770+ // There is a trailing comma so render each member on a new line.
771+ try ais .pushIndent (.normal );
772+ try renderToken (r , lbrace , .newline );
773+ var i = lbrace + 1 ;
774+ while (i < rbrace ) : (i += 1 ) {
775+ if (i > lbrace + 1 ) try renderExtraNewlineToken (r , i );
776+ switch (tree .tokenTag (i )) {
777+ .doc_comment = > try renderToken (r , i , .newline ),
778+ .identifier = > {
779+ try ais .pushSpace (.comma );
780+ try renderIdentifier (r , i , .comma , .eagerly_unquote );
781+ ais .popSpace ();
782+ },
783+ .comma = > {},
784+ else = > unreachable ,
785+ }
786786 }
787+ ais .popIndent ();
788+ return renderToken (r , rbrace , space );
789+ } else {
790+ // There is no trailing comma so render everything on one line.
791+ try renderToken (r , lbrace , .space );
792+ var i = lbrace + 1 ;
793+ while (i < rbrace ) : (i += 1 ) {
794+ switch (tree .tokenTag (i )) {
795+ .identifier = > try renderIdentifier (r , i , .comma_space , .eagerly_unquote ),
796+ .comma = > {},
797+ else = > unreachable ,
798+ }
799+ }
800+ return renderToken (r , rbrace , space );
787801 }
788- return renderToken (r , rbrace , space );
789802 }
790803 },
791804
0 commit comments