public static Task <Document> RefactorAsync( Document document, IfStatementSyntax ifStatement, CancellationToken cancellationToken) { ReturnStatementSyntax newReturnStatement = CreateReturnStatement(ifStatement); if (ifStatement.Else != null) { newReturnStatement = newReturnStatement.WithTriviaFrom(ifStatement); return(document.ReplaceNodeAsync(ifStatement, newReturnStatement, cancellationToken)); } else { var block = (BlockSyntax)ifStatement.Parent; SyntaxList <StatementSyntax> statements = block.Statements; int index = statements.IndexOf(ifStatement); var returnStatement = (ReturnStatementSyntax)statements[index + 1]; newReturnStatement = newReturnStatement .WithLeadingTrivia(ifStatement.GetLeadingTrivia()) .WithTrailingTrivia(returnStatement.GetTrailingTrivia()); SyntaxList <StatementSyntax> newStatements = statements .RemoveAt(index) .ReplaceAt(index, newReturnStatement); return(document.ReplaceNodeAsync(block, block.WithStatements(newStatements), cancellationToken)); } }
private static SyntaxNode GetNewRoot( SyntaxNode root, IfStatementSyntax ifStatement, ReturnStatementSyntax newReturnStatement) { if (ifStatement.Else != null) { newReturnStatement = newReturnStatement.WithTriviaFrom(ifStatement); return(root.ReplaceNode(ifStatement, newReturnStatement)); } else { var block = (BlockSyntax)ifStatement.Parent; int index = block.Statements.IndexOf(ifStatement); var returnStatement = (ReturnStatementSyntax)block.Statements[index + 1]; newReturnStatement = newReturnStatement .WithLeadingTrivia(ifStatement.GetLeadingTrivia()) .WithTrailingTrivia(returnStatement.GetTrailingTrivia()); SyntaxList <StatementSyntax> statements = block.Statements .RemoveAt(index); statements = statements .Replace(statements[index], newReturnStatement); return(root.ReplaceNode(block, block.WithStatements(statements))); } }
public static async Task <Document> RefactorAsync( Document document, IfStatementSyntax ifStatement, CancellationToken cancellationToken) { ExpressionSyntax returnExpression = ifStatement.Condition; if (GetBooleanLiteral(ifStatement.Statement).Kind() == SyntaxKind.FalseLiteralExpression) { SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); returnExpression = CSharpUtility.LogicallyNegate(returnExpression, semanticModel, cancellationToken); } ReturnStatementSyntax newReturnStatement = ReturnStatement( ReturnKeyword().WithTrailingTrivia(Space), returnExpression, SemicolonToken()); if (ifStatement.Else != null) { newReturnStatement = newReturnStatement.WithTriviaFrom(ifStatement); return(await document.ReplaceNodeAsync(ifStatement, newReturnStatement, cancellationToken).ConfigureAwait(false)); } StatementContainer container = StatementContainer.Create(ifStatement); SyntaxList <StatementSyntax> statements = container.Statements; int index = statements.IndexOf(ifStatement); var returnStatement = (ReturnStatementSyntax)statements[index + 1]; newReturnStatement = newReturnStatement .WithLeadingTrivia(ifStatement.GetLeadingTrivia()) .WithTrailingTrivia(returnStatement.GetTrailingTrivia()); SyntaxList <StatementSyntax> newStatements = statements .RemoveAt(index) .ReplaceAt(index, newReturnStatement); //TODO: ReplaceStatementsAsync return(await document.ReplaceNodeAsync(container.Node, container.WithStatements(newStatements).Node, cancellationToken).ConfigureAwait(false)); }
private static async Task <Document> ReplaceIfElseWithReturnStatementAsync( Document document, IfStatementSyntax ifStatement, ExpressionSyntax whenTrue, ExpressionSyntax whenFalse, CancellationToken cancellationToken = default(CancellationToken)) { SyntaxNode root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); ReturnStatementSyntax newNode = ReturnStatement( CreateConditionalExpression(ifStatement, whenTrue, whenFalse)); newNode = newNode .WithTriviaFrom(ifStatement) .WithFormatterAnnotation(); SyntaxNode newRoot = root.ReplaceNode(ifStatement, newNode); return(document.WithSyntaxRoot(newRoot)); }
private static SyntaxNode GetNewRoot( SyntaxNode root, IfStatementSyntax ifStatement, ReturnStatementSyntax newReturnStatement) { if (ifStatement.Else != null) { ReturnStatementSyntax returnStatement = SimplifyIfStatementToReturnStatementAnalyzer.GetReturnStatement(ifStatement.Statement); LiteralExpressionSyntax booleanLiteral = SimplifyIfStatementToReturnStatementAnalyzer.GetBooleanLiteral(returnStatement); newReturnStatement = newReturnStatement.WithTriviaFrom(ifStatement); return(root.ReplaceNode(ifStatement, newReturnStatement)); } else { var block = (BlockSyntax)ifStatement.Parent; int index = block.Statements.IndexOf(ifStatement); var returnStatement = (ReturnStatementSyntax)block.Statements[index + 1]; LiteralExpressionSyntax booleanLiteral = SimplifyIfStatementToReturnStatementAnalyzer.GetBooleanLiteral(returnStatement); newReturnStatement = newReturnStatement .WithLeadingTrivia(ifStatement.GetLeadingTrivia()) .WithTrailingTrivia(returnStatement.GetTrailingTrivia()); SyntaxList <StatementSyntax> statements = block.Statements .RemoveAt(index); statements = statements .Replace(statements[index], newReturnStatement); return(root.ReplaceNode(block, block.WithStatements(statements))); } }