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));
        }
예제 #2
0
        /// <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())));
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }