private static SyntaxList <StatementSyntax> InsertWithinTriviaOfNext( SyntaxList <StatementSyntax> oldStatements, StatementSyntax newStatement, int statementIndex) { var nextStatement = oldStatements.ElementAtOrDefault(statementIndex); if (nextStatement == null) { return(oldStatements.Insert(statementIndex, newStatement)); } // Grab all the trivia before the line the next statement is on and move it to the new node. var nextStatementLeading = nextStatement.GetLeadingTrivia(); var precedingEndOfLine = nextStatementLeading.LastOrDefault(t => t.Kind() == SyntaxKind.EndOfLineTrivia); if (precedingEndOfLine == default) { return(oldStatements.ReplaceRange( nextStatement, new[] { newStatement, nextStatement })); } var endOfLineIndex = nextStatementLeading.IndexOf(precedingEndOfLine) + 1; return(oldStatements.ReplaceRange( nextStatement, new[] { newStatement.WithLeadingTrivia(nextStatementLeading.Take(endOfLineIndex)), nextStatement.WithLeadingTrivia(nextStatementLeading.Skip(endOfLineIndex)), })); }
private static SyntaxList<StatementSyntax> InsertWithinTriviaOfNext( SyntaxList<StatementSyntax> oldStatements, StatementSyntax newStatement, int statementIndex) { var nextStatement = oldStatements.ElementAtOrDefault(statementIndex); return nextStatement == null ? oldStatements.Insert(statementIndex, newStatement) : oldStatements.ReplaceRange(nextStatement, new[] { newStatement.WithLeadingTrivia(nextStatement.GetLeadingTrivia()), nextStatement.WithoutLeadingTrivia() }); }