private static TextSpan?GetEmptyLineSpan(
            SyntaxTriviaList triviaList,
            bool isEnd)
        {
            SyntaxTriviaList.Enumerator en = triviaList.GetEnumerator();
            while (en.MoveNext())
            {
                switch (en.Current.Kind())
                {
                case SyntaxKind.EndOfLineTrivia:
                {
                    SyntaxTrivia endOfLine = en.Current;

                    if (isEnd)
                    {
                        while (en.MoveNext())
                        {
                            if (!en.Current.IsWhitespaceOrEndOfLineTrivia())
                            {
                                return(null);
                            }
                        }
                    }

                    return(TextSpan.FromBounds(triviaList.Span.Start, endOfLine.Span.End));
                }

                case SyntaxKind.WhitespaceTrivia:
                {
                    break;
                }

                default:
                {
                    return(null);
                }
                }
            }

            return(null);
        }
        private static bool IsOnEmptyLine(TextSpan span, SyntaxTriviaList leadingTrivia)
        {
            SyntaxTriviaList.Enumerator en = leadingTrivia.GetEnumerator();

            while (en.MoveNext())
            {
                if (en.Current.Span.Contains(span))
                {
                    if (en.Current.IsEndOfLineTrivia())
                    {
                        return(true);
                    }

                    return(en.Current.IsWhitespaceTrivia() &&
                           en.MoveNext() &&
                           en.Current.IsEndOfLineTrivia());
                }
            }

            return(false);
        }
Exemple #3
0
        private static bool IsStandardTriviaBetweenLines(SyntaxTriviaList trailingTrivia, SyntaxTriviaList leadingTrivia)
        {
            if (leadingTrivia.Any()
                && leadingTrivia.All(f => f.IsWhitespaceTrivia()))
            {
                SyntaxTriviaList.Enumerator en = trailingTrivia.GetEnumerator();

                while (en.MoveNext())
                {
                    SyntaxKind kind = en.Current.Kind();

                    if (kind == SyntaxKind.WhitespaceTrivia)
                        continue;

                    return kind == SyntaxKind.EndOfLineTrivia
                        && !en.MoveNext();
                }
            }

            return false;
        }
Exemple #4
0
        public static Task <Document> RemoveEmptyLinesBeforeAsync(
            Document document,
            SyntaxToken token,
            CancellationToken cancellationToken = default)
        {
            SyntaxTriviaList leadingTrivia = token.LeadingTrivia;

            int count = 0;

            SyntaxTriviaList.Enumerator en = leadingTrivia.GetEnumerator();
            while (en.MoveNext())
            {
                if (en.Current.IsWhitespaceTrivia())
                {
                    if (!en.MoveNext())
                    {
                        break;
                    }

                    if (!en.Current.IsEndOfLineTrivia())
                    {
                        break;
                    }

                    count += 2;
                }
                else if (en.Current.IsEndOfLineTrivia())
                {
                    count++;
                }
                else
                {
                    break;
                }
            }

            SyntaxToken newToken = token.WithLeadingTrivia(leadingTrivia.RemoveRange(0, count));

            return(document.ReplaceTokenAsync(token, newToken, cancellationToken));
        }