@@ -50,24 +50,45 @@ public static List<Doc> Print<T>(
5050 continue ;
5151 }
5252
53- void AddSeparatorIfNeeded ( )
53+ Doc GetSeparatorIfNeeded ( )
5454 {
55- if ( members is SeparatedSyntaxList < T > list )
55+ if ( members is not SeparatedSyntaxList < T > list )
5656 {
57- if ( memberIndex < list . SeparatorCount )
57+ return Doc . Null ;
58+ }
59+
60+ if ( memberIndex < list . SeparatorCount )
61+ {
62+ return Token . Print ( list . GetSeparator ( memberIndex ) , context ) ;
63+ }
64+
65+ if (
66+ node is EnumDeclarationSyntax enumDeclarationSyntax
67+ && member is EnumMemberDeclarationSyntax
68+ )
69+ {
70+ var firstTrailingComment = list [ memberIndex ]
71+ . GetTrailingTrivia ( )
72+ . FirstOrDefault ( o => o . IsComment ( ) ) ;
73+
74+ if ( firstTrailingComment != default )
5875 {
59- result . Add ( Token . Print ( list . GetSeparator ( memberIndex ) , context ) ) ;
76+ context . WithTrailingComma (
77+ firstTrailingComment ,
78+ TrailingComma . Print (
79+ enumDeclarationSyntax . CloseBraceToken ,
80+ context ,
81+ true
82+ )
83+ ) ;
6084 }
61- else if (
62- node is EnumDeclarationSyntax enumDeclarationSyntax
63- && member is EnumMemberDeclarationSyntax
64- )
85+ else
6586 {
66- result . Add (
67- TrailingComma . Print ( enumDeclarationSyntax . CloseBraceToken , context )
68- ) ;
87+ return TrailingComma . Print ( enumDeclarationSyntax . CloseBraceToken , context ) ;
6988 }
7089 }
90+
91+ return Doc . Null ;
7192 }
7293
7394 var blankLineIsForced = (
@@ -104,7 +125,8 @@ member is MethodDeclarationSyntax methodDeclaration
104125 {
105126 lastMemberForcedBlankLine = blankLineIsForced ;
106127 result . Add ( Node . Print ( member , context ) ) ;
107- AddSeparatorIfNeeded ( ) ;
128+ result . AddIfNotNull ( GetSeparatorIfNeeded ( ) ) ;
129+
108130 continue ;
109131 }
110132
@@ -193,8 +215,10 @@ or SyntaxKind.EndRegionDirectiveTrivia
193215 context . State . NextTriviaNeedsLine = true ;
194216 }
195217
218+ // this has a side effect (yuck) that fixes the trailing comma + trailing comment issue so we have to call it first
219+ var separator = GetSeparatorIfNeeded ( ) ;
196220 result . Add ( Doc . HardLine , Node . Print ( member , context ) ) ;
197- AddSeparatorIfNeeded ( ) ;
221+ result . AddIfNotNull ( separator ) ;
198222
199223 lastMemberForcedBlankLine = blankLineIsForced ;
200224 }
0 commit comments