public void Add(SyntaxTriviaList list) { this.Add(list, 0, list.Count); }
private SyntaxTriviaList RewriteTrivia( SyntaxTriviaList triviaList, int depth, bool isTrailing, bool indentAfterLineBreak, bool mustHaveSeparator, int lineBreaksAfter) { ArrayBuilder <SyntaxTrivia> currentTriviaList = ArrayBuilder <SyntaxTrivia> .GetInstance(triviaList.Count); try { foreach (var trivia in triviaList) { if (trivia.IsKind(SyntaxKind.WhitespaceTrivia) || trivia.IsKind(SyntaxKind.EndOfLineTrivia) || trivia.FullWidth == 0) { continue; } var needsSeparator = (currentTriviaList.Count > 0 && NeedsSeparatorBetween(currentTriviaList.Last())) || (currentTriviaList.Count == 0 && isTrailing); var needsLineBreak = NeedsLineBreakBefore(trivia, isTrailing) || (currentTriviaList.Count > 0 && NeedsLineBreakBetween(currentTriviaList.Last(), trivia, isTrailing)); if (needsLineBreak && !_afterLineBreak) { currentTriviaList.Add(GetEndOfLine()); _afterLineBreak = true; _afterIndentation = false; } if (_afterLineBreak) { if (!_afterIndentation && NeedsIndentAfterLineBreak(trivia)) { currentTriviaList.Add(this.GetIndentation(GetDeclarationDepth(trivia))); _afterIndentation = true; } } else if (needsSeparator) { currentTriviaList.Add(GetSpace()); _afterLineBreak = false; _afterIndentation = false; } if (trivia.HasStructure) { var tr = this.VisitStructuredTrivia(trivia); currentTriviaList.Add(tr); } else if (trivia.IsKind(SyntaxKind.DocumentationCommentExteriorTrivia)) { // recreate exterior to remove any leading whitespace currentTriviaList.Add(s_trimmedDocCommentExterior); } else { currentTriviaList.Add(trivia); } if (NeedsLineBreakAfter(trivia, isTrailing) && (currentTriviaList.Count == 0 || !EndsInLineBreak(currentTriviaList.Last()))) { currentTriviaList.Add(GetEndOfLine()); _afterLineBreak = true; _afterIndentation = false; } } if (lineBreaksAfter > 0) { if (currentTriviaList.Count > 0 && EndsInLineBreak(currentTriviaList.Last())) { lineBreaksAfter--; } for (int i = 0; i < lineBreaksAfter; i++) { currentTriviaList.Add(GetEndOfLine()); _afterLineBreak = true; _afterIndentation = false; } } else if (indentAfterLineBreak && _afterLineBreak && !_afterIndentation) { currentTriviaList.Add(this.GetIndentation(depth)); _afterIndentation = true; } else if (mustHaveSeparator) { currentTriviaList.Add(GetSpace()); _afterLineBreak = false; _afterIndentation = false; } if (currentTriviaList.Count == 0) { return(default(SyntaxTriviaList)); } else if (currentTriviaList.Count == 1) { return(SyntaxFactory.TriviaList(currentTriviaList.First())); } else { return(SyntaxFactory.TriviaList(currentTriviaList)); } } finally { currentTriviaList.Free(); } }
private static bool HasEndOfLine(SyntaxTriviaList list) { return(list.Any(t => IsEndOfLine(t))); }