private LineColumn FormatTrivia <T>(Formatter <T> formatter, WhitespaceAppender <T> whitespaceAdder, List <T> changes, CancellationToken cancellationToken) { var lineColumn = this.InitialLineColumn; var existingWhitespaceDelta = LineColumnDelta.Default; var previousWhitespaceTrivia = default(SyntaxTrivia); var previousTrivia = default(SyntaxTrivia); var implicitLineBreak = false; var list = new TriviaList(this.Token1.TrailingTrivia, this.Token2.LeadingTrivia); foreach (var trivia in list) { if (trivia.RawKind == 0) { continue; } if (IsWhitespaceOrEndOfLine(trivia)) { if (IsEndOfLine(trivia)) { implicitLineBreak = false; } existingWhitespaceDelta = existingWhitespaceDelta.With( GetLineColumnOfWhitespace( lineColumn, previousTrivia, previousWhitespaceTrivia, existingWhitespaceDelta, trivia)); previousWhitespaceTrivia = trivia; continue; } previousWhitespaceTrivia = default(SyntaxTrivia); lineColumn = FormatFirstTriviaAndWhitespaceAfter( lineColumn, previousTrivia, existingWhitespaceDelta, trivia, formatter, whitespaceAdder, changes, implicitLineBreak, cancellationToken); implicitLineBreak = implicitLineBreak || ContainsImplicitLineBreak(trivia); existingWhitespaceDelta = LineColumnDelta.Default; previousTrivia = trivia; } lineColumn = FormatFirstTriviaAndWhitespaceAfter( lineColumn, previousTrivia, existingWhitespaceDelta, default(SyntaxTrivia), formatter, whitespaceAdder, changes, implicitLineBreak, cancellationToken); return(lineColumn); }
private LineColumn FormatFirstTriviaAndWhitespaceAfter <T>( LineColumn lineColumnBeforeTrivia1, SyntaxTrivia trivia1, LineColumnDelta existingWhitespaceBetween, SyntaxTrivia trivia2, Formatter <T> format, WhitespaceAppender <T> addWhitespaceTrivia, List <T> changes, CancellationToken cancellationToken) { var lineColumnAfterTrivia1 = trivia1.RawKind == 0 ? lineColumnBeforeTrivia1 : lineColumnBeforeTrivia1.With(format(lineColumnBeforeTrivia1, trivia1, changes, cancellationToken)); var rule = GetOverallLineColumnRuleBetween(trivia1, existingWhitespaceBetween, trivia2); var whitespaceDelta = Apply(lineColumnBeforeTrivia1, trivia1, lineColumnAfterTrivia1, existingWhitespaceBetween, trivia2, rule); var span = GetTextSpan(trivia1, trivia2); addWhitespaceTrivia(lineColumnAfterTrivia1, whitespaceDelta, span, changes); return(lineColumnAfterTrivia1.With(whitespaceDelta)); }
private LineColumn FormatTrivia <T>(Formatter <T> formatter, WhitespaceAppender <T> whitespaceAdder, ArrayBuilder <T> changes, CancellationToken cancellationToken) { var lineColumn = this.InitialLineColumn; var existingWhitespaceDelta = LineColumnDelta.Default; var previousWhitespaceTrivia = default(SyntaxTrivia); var previousTrivia = default(SyntaxTrivia); var implicitLineBreak = false; var list = new TriviaList(this.Token1.TrailingTrivia, this.Token2.LeadingTrivia); // Holds last position before _ ' Comment so we can reset after processing comment var previousLineColumn = LineColumn.Default; SyntaxTrivia trivia; for (var i = 0; i < list.Count; i++) { trivia = list[i]; if (trivia.RawKind == 0) { continue; } if (IsWhitespaceOrEndOfLine(trivia)) { existingWhitespaceDelta = existingWhitespaceDelta.With( GetLineColumnOfWhitespace( lineColumn, previousTrivia, previousWhitespaceTrivia, existingWhitespaceDelta, trivia)); if (IsEndOfLine(trivia)) { implicitLineBreak = false; // If we are on a new line we don't want to continue // reseting indenting this handles the case of a NewLine // followed by whitespace and a comment previousLineColumn = LineColumn.Default; } else if (LineContinuationFollowedByWhitespaceComment(previousTrivia, (i + 1) < list.Count ? list[i + 1] : default)) { // we have a comment following an underscore space the formatter // thinks this next line should be shifted to right by // indentation value. Since we know through the test above that // this is the special case of _ ' Comment we don't want the extra indent // so we set the LineColumn value back to where it was before the comment previousLineColumn = lineColumn; } previousWhitespaceTrivia = trivia; continue; } previousWhitespaceTrivia = default; lineColumn = FormatFirstTriviaAndWhitespaceAfter( lineColumn, previousTrivia, existingWhitespaceDelta, trivia, formatter, whitespaceAdder, changes, implicitLineBreak, cancellationToken); if (previousLineColumn.Column != 0 && previousLineColumn.Column < lineColumn.Column && IsVisualBasicComment(trivia)) { lineColumn = previousLineColumn; // When we see a NewLine we don't want any special handling // for _ ' Comment previousLineColumn = LineColumn.Default; } implicitLineBreak = implicitLineBreak || ContainsImplicitLineBreak(trivia); existingWhitespaceDelta = LineColumnDelta.Default; previousTrivia = trivia; } lineColumn = FormatFirstTriviaAndWhitespaceAfter( lineColumn, previousTrivia, existingWhitespaceDelta, default,