private async Task <Document> AddNewLineAfterUsingBlock(Document document, UsingDirectiveSyntax usingDirective, CancellationToken cancellationToken) { var newUsingDirective = usingDirective .WithTrailingTrivia( usingDirective.GetTrailingTrivia().Add(SyntaxFactory.EndOfLine(Environment.NewLine))); var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); root = root.ReplaceNode(usingDirective, newUsingDirective); return(document.WithSyntaxRoot(root)); }
/// <summary> /// Adds the usings to the compilation unit, adding a blank line after the last using /// </summary> private static CompilationUnitSyntax AddUsingsToCompilationUnit(CompilationUnitSyntax nsubsTree, UsingDirectiveSyntax usingToRemove, UsingDirectiveSyntax usingToAdd) { // ensure the last using has a blank line after it. usingToAdd = usingToAdd.WithTrailingTrivia(Whitespace(Environment.NewLine + Environment.NewLine)); var existingUsings = nsubsTree.Usings.ToArray(); // remove the existing usings, trim the leading trivia, then add all usings back in with the trailing space. // this handles the cases of: // - no existing usings // - one existing using that will be replaced // - one existing using that will be appended to return(nsubsTree .RemoveNodes(existingUsings, SyntaxRemoveOptions.KeepNoTrivia) .WithoutLeadingTrivia() .WithUsings(List(existingUsings.Except(new[] { usingToRemove }).Append(usingToAdd).ToArray()))); }
private static UsingDirectiveSyntax RemoveLeadingAndTrailingCompilerDirectives(UsingDirectiveSyntax usingSyntax) { UsingDirectiveSyntax usingDirectiveToUse = usingSyntax; if (usingDirectiveToUse.HasLeadingTrivia) { if (usingDirectiveToUse.HasLeadingTrivia) { var newLeadingTrivia = RemoveCompilerDirectives(usingDirectiveToUse.GetLeadingTrivia()); usingDirectiveToUse = usingDirectiveToUse.WithLeadingTrivia(newLeadingTrivia); } if (usingDirectiveToUse.HasTrailingTrivia) { var newTrailingTrivia = RemoveCompilerDirectives(usingDirectiveToUse.GetTrailingTrivia()); usingDirectiveToUse = usingDirectiveToUse.WithTrailingTrivia(newTrailingTrivia); } } return(usingDirectiveToUse); }
private static ICollection <UsingDirectiveSyntax> FormatUsings(IList <UsingDirectiveSyntax> usingsThatNeedToBeMoved) { var newList = new List <UsingDirectiveSyntax>(usingsThatNeedToBeMoved.Count); for (int i = 0; i < usingsThatNeedToBeMoved.Count; i++) { UsingDirectiveSyntax usingNode = usingsThatNeedToBeMoved[i]; if (i == 0) { usingNode = usingNode.WithoutLeadingTrivia(); } UsingDirectiveSyntax newNode = usingNode.NormalizeWhitespace().WithTrailingTrivia(SyntaxFactory.CarriageReturnLineFeed); if (i == usingsThatNeedToBeMoved.Count - 1) { newNode = newNode.WithTrailingTrivia(SyntaxFactory.CarriageReturnLineFeed, SyntaxFactory.CarriageReturnLineFeed); } newList.Add(newNode); } return(newList); }