@@ -21,14 +21,40 @@ public async Task<Document> ProcessAsync(Document document, CancellationToken ca
21
21
var syntaxRoot = await document . GetSyntaxRootAsync ( cancellationToken ) as CSharpSyntaxNode ;
22
22
if ( syntaxRoot == null )
23
23
return document ;
24
- Document newDocument ;
25
- // NewLine between copyright and using directives.
24
+ IEnumerable < SyntaxNode > nodesToAdd = new List < SyntaxNode > ( ) ;
26
25
var firstUsing = syntaxRoot . DescendantNodesAndSelf ( ) . OfType < UsingDirectiveSyntax > ( ) . First ( ) ;
27
- var hasEndOfLineTrivia = firstUsing . GetLeadingTrivia ( ) . First ( ) . CSharpKind ( ) == SyntaxKind . EndOfLineTrivia ;
28
- if ( ! hasEndOfLineTrivia )
26
+ var firstNamespace = syntaxRoot . DescendantNodesAndSelf ( ) . OfType < NamespaceDeclarationSyntax > ( ) . First ( ) ;
27
+ // NewLine between copyright and using directives.
28
+ var newUsingTriviaList = ! firstUsing . HasLeadingTrivia ? SyntaxTriviaList . Create ( SyntaxFactory . EndOfLine ( "\n " ) ) : SyntaxTriviaList . Empty ;
29
+ if ( ! newUsingTriviaList . Any ( ) )
30
+ {
31
+ newUsingTriviaList = ! ( firstUsing . GetLeadingTrivia ( ) . First ( ) . CSharpKind ( ) == SyntaxKind . EndOfLineTrivia ) ?
32
+ firstUsing . GetLeadingTrivia ( ) . Insert ( 0 , SyntaxFactory . EndOfLine ( "\n " ) ) : SyntaxTriviaList . Empty ;
33
+ if ( newUsingTriviaList . Any ( ) ) nodesToAdd = nodesToAdd . Concat ( new [ ] { firstUsing } ) ;
34
+ }
35
+
36
+ // NewLine between copyright and using directives.
37
+ var newNamespaceTriviaList = ! firstNamespace . HasLeadingTrivia ? SyntaxTriviaList . Create ( SyntaxFactory . EndOfLine ( "\n " ) ) : SyntaxTriviaList . Empty ;
38
+ if ( ! newNamespaceTriviaList . Any ( ) )
39
+ {
40
+ newNamespaceTriviaList = ! ( firstNamespace . GetLeadingTrivia ( ) . First ( ) . CSharpKind ( ) == SyntaxKind . EndOfLineTrivia ) ?
41
+ firstNamespace . GetLeadingTrivia ( ) . Insert ( 0 , SyntaxFactory . EndOfLine ( "\n " ) ) : SyntaxTriviaList . Empty ;
42
+ if ( newNamespaceTriviaList . Any ( ) ) nodesToAdd = nodesToAdd . Concat ( new [ ] { firstNamespace } ) ;
43
+ }
44
+
45
+ Func < SyntaxNode , SyntaxNode , SyntaxNode > replacementForNodes = ( node , dummy ) =>
46
+ {
47
+ if ( node as NamespaceDeclarationSyntax != null )
48
+ return node . WithLeadingTrivia ( newNamespaceTriviaList ) ;
49
+ if ( node as UsingDirectiveSyntax != null )
50
+ return node . WithLeadingTrivia ( newUsingTriviaList ) ;
51
+
52
+ return null ;
53
+ } ;
54
+
55
+ if ( nodesToAdd . Any ( ) )
29
56
{
30
- var newTriviaList = firstUsing . GetLeadingTrivia ( ) . Insert ( 0 , SyntaxFactory . EndOfLine ( "\n " ) ) ;
31
- newDocument = document . WithSyntaxRoot ( syntaxRoot . ReplaceNode ( firstUsing , firstUsing . WithLeadingTrivia ( newTriviaList ) ) ) ;
57
+ return document . WithSyntaxRoot ( syntaxRoot . ReplaceNodes ( nodesToAdd , replacementForNodes ) ) ;
32
58
}
33
59
34
60
return document ;
0 commit comments