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); }
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; }
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)); }