public static async Task <Document> RefactorAsync( Document document, ExpressionStatementSyntax statement, ReturnStatementSyntax returnStatement, CancellationToken cancellationToken = default(CancellationToken)) { SyntaxNode root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var block = (BlockSyntax)statement.Parent; SyntaxList <StatementSyntax> statements = block.Statements; int index = statements.IndexOf(statement); SyntaxList <StatementSyntax> newStatements = statements.RemoveAt(index); var assignmentExpression = (AssignmentExpressionSyntax)statement.Expression; ReturnStatementSyntax newReturnStatement = returnStatement .WithExpression(assignmentExpression.Right) .WithLeadingTrivia(assignmentExpression.GetLeadingTrivia()) .WithTrailingTrivia(returnStatement.GetTrailingTrivia()) .WithFormatterAnnotation(); newStatements = newStatements.Replace(newStatements[index], newReturnStatement); root = root.ReplaceNode(block, block.WithStatements(newStatements)); return(document.WithSyntaxRoot(root)); }
public static async Task <Document> RefactorAsync( Document document, StatementContainer container, IfStatementSyntax ifStatement, ReturnStatementSyntax returnStatement, CancellationToken cancellationToken) { ExpressionSyntax expression = ReplaceIfWithStatementRefactoring.GetExpression( ifStatement.Condition, ReplaceIfWithStatementRefactoring.GetReturnExpression(ifStatement), returnStatement.Expression); ReturnStatementSyntax newReturnStatement = ReturnStatement(expression); SyntaxList <StatementSyntax> statements = container.Statements; int index = statements.IndexOf(ifStatement); newReturnStatement = newReturnStatement .WithLeadingTrivia(ifStatement.GetLeadingTrivia()) .WithTrailingTrivia(returnStatement.GetTrailingTrivia()) .WithFormatterAnnotation(); SyntaxList <StatementSyntax> newStatements = statements .RemoveAt(index) .ReplaceAt(index, newReturnStatement); return(await document.ReplaceNodeAsync(container.Node, container.NodeWithStatements(newStatements), cancellationToken).ConfigureAwait(false)); }
private static async Task <Document> MergeLocalDeclarationWithReturnStatementAsync( Document document, LocalDeclarationStatementSyntax localDeclaration, ReturnStatementSyntax returnStatement, BlockSyntax block, CancellationToken cancellationToken) { SyntaxNode oldRoot = await document.GetSyntaxRootAsync(cancellationToken); ReturnStatementSyntax newReturnStatement = returnStatement .WithExpression(localDeclaration.Declaration.Variables[0].Initializer.Value.WithoutTrivia()) .WithLeadingTrivia(localDeclaration.GetLeadingTrivia()) .WithTrailingTrivia(returnStatement.GetTrailingTrivia()) .WithAdditionalAnnotations(Formatter.Annotation); int index = block.Statements.IndexOf(localDeclaration); SyntaxList <StatementSyntax> newStatements = block.Statements .RemoveAt(index) .RemoveAt(index) .Insert(index, newReturnStatement); BlockSyntax newBlock = block.WithStatements(newStatements); SyntaxNode newRoot = oldRoot.ReplaceNode(block, newBlock); return(document.WithSyntaxRoot(newRoot)); }
private static async Task <Document> RefactorAsync( Document document, StatementContainer container, IfStatementSyntax ifStatement, ReturnStatementSyntax returnStatement, ExpressionSyntax whenTrue, ExpressionSyntax whenFalse, CancellationToken cancellationToken = default(CancellationToken)) { SyntaxList <StatementSyntax> statements = container.Statements; int index = statements.IndexOf(ifStatement); ConditionalExpressionSyntax conditionalExpression = ReplaceIfWithStatementRefactoring.CreateConditionalExpression(ifStatement.Condition, whenTrue, whenFalse); ReturnStatementSyntax newReturnStatement = ReturnStatement(conditionalExpression) .WithLeadingTrivia(ifStatement.GetLeadingTrivia()) .WithTrailingTrivia(returnStatement.GetTrailingTrivia()) .WithFormatterAnnotation(); SyntaxList <StatementSyntax> newStatements = statements .Remove(returnStatement) .ReplaceAt(index, newReturnStatement); return(await document.ReplaceNodeAsync(container.Node, container.NodeWithStatements(newStatements), cancellationToken).ConfigureAwait(false)); }