@@ -61,16 +61,42 @@ private void UpdateEnum(string sourceFile)
61
61
var enumDeclarationSyntaxNode = namespaceDeclarationNode . ChildNodes ( ) . OfType < EnumDeclarationSyntax > ( ) . Single ( ) ;
62
62
63
63
var emptyEnumDeclarationSyntaxNode = enumDeclarationSyntaxNode . RemoveNodes ( enumDeclarationSyntaxNode . ChildNodes ( ) . OfType < EnumMemberDeclarationSyntax > ( ) , SyntaxRemoveOptions . KeepDirectives ) ;
64
+
65
+ var leadingTriviaList = SyntaxTriviaList . Create ( SyntaxFactory . Whitespace ( " " ) ) ;
64
66
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 ) ) ) ;
67
69
70
+ generatedEnumDeclarationSyntax = AddLineFeedsToCommas ( generatedEnumDeclarationSyntax ) ;
71
+
68
72
var generatedNamespaceDeclarationSyntaxNode = namespaceDeclarationNode . ReplaceNode ( enumDeclarationSyntaxNode , generatedEnumDeclarationSyntax ) ;
69
73
var generatedRootNode = rootNode . ReplaceNode ( namespaceDeclarationNode , generatedNamespaceDeclarationSyntaxNode ) ;
74
+
75
+ Console . WriteLine ( generatedRootNode . ToFullString ( ) ) ;
76
+ }
70
77
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 ) ;
72
82
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
+ }
75
101
}
76
102
}
0 commit comments