@@ -61,16 +61,42 @@ private void UpdateEnum(string sourceFile)
6161 var enumDeclarationSyntaxNode = namespaceDeclarationNode . ChildNodes ( ) . OfType < EnumDeclarationSyntax > ( ) . Single ( ) ;
6262
6363 var emptyEnumDeclarationSyntaxNode = enumDeclarationSyntaxNode . RemoveNodes ( enumDeclarationSyntaxNode . ChildNodes ( ) . OfType < EnumMemberDeclarationSyntax > ( ) , SyntaxRemoveOptions . KeepDirectives ) ;
64+
65+ var leadingTriviaList = SyntaxTriviaList . Create ( SyntaxFactory . Whitespace ( " " ) ) ;
6466 var generatedEnumDeclarationSyntax = emptyEnumDeclarationSyntaxNode . AddMembers (
65- SyntaxFactory . EnumMemberDeclaration ( "Aston" ) ,
66- SyntaxFactory . EnumMemberDeclaration ( "Villa" ) ) ;
67+ SyntaxFactory . EnumMemberDeclaration ( SyntaxFactory . Identifier ( leadingTriviaList , "Aston" , SyntaxTriviaList . Empty ) ) ,
68+ SyntaxFactory . EnumMemberDeclaration ( SyntaxFactory . Identifier ( leadingTriviaList , "Villa" , SyntaxTriviaList . Empty ) ) ) ;
6769
70+ generatedEnumDeclarationSyntax = AddLineFeedsToCommas ( generatedEnumDeclarationSyntax ) ;
71+
6872 var generatedNamespaceDeclarationSyntaxNode = namespaceDeclarationNode . ReplaceNode ( enumDeclarationSyntaxNode , generatedEnumDeclarationSyntax ) ;
6973 var generatedRootNode = rootNode . ReplaceNode ( namespaceDeclarationNode , generatedNamespaceDeclarationSyntaxNode ) ;
74+
75+ Console . WriteLine ( generatedRootNode . ToFullString ( ) ) ;
76+ }
7077
71- //TODO checkout http://roslyn.codeplex.com/wikipage?title=Syntax%20Visualizer&referringTitle=Home for Roslyn SDK
78+ private static EnumDeclarationSyntax AddLineFeedsToCommas ( EnumDeclarationSyntax enumDeclarationSyntax )
79+ {
80+ var none = new SyntaxToken ( ) ;
81+ var trailingTriviaList = SyntaxTriviaList . Create ( SyntaxFactory . ElasticCarriageReturnLineFeed ) ;
7282
73- Console . WriteLine ( generatedRootNode . ToFullString ( ) ) ;
74- }
83+ Func < EnumDeclarationSyntax , SyntaxToken > next = enumSyntax => enumSyntax . ChildNodesAndTokens ( )
84+ . Where ( nodeOrToken => nodeOrToken . IsToken )
85+ . Select ( nodeOrToken => nodeOrToken . AsToken ( ) )
86+ . FirstOrDefault (
87+ token =>
88+ token . Value . Equals ( "," ) &&
89+ ( ! token . HasTrailingTrivia || ! token . TrailingTrivia . Any ( SyntaxKind . EndOfLineTrivia ) ) ) ;
90+
91+ SyntaxToken current ;
92+ while ( ( current = next ( enumDeclarationSyntax ) ) != none )
93+ {
94+ enumDeclarationSyntax = enumDeclarationSyntax . ReplaceToken ( current ,
95+ SyntaxFactory . Identifier ( SyntaxTriviaList . Empty , "," , trailingTriviaList )
96+ ) ;
97+ }
98+
99+ return enumDeclarationSyntax ;
100+ }
75101 }
76102}
0 commit comments