public static ImmutableArray <IfAnalysis> Analyze( StatementListSelection selectedStatements, IfAnalysisOptions options, SemanticModel semanticModel, CancellationToken cancellationToken) { if (selectedStatements.Count != 2) { return(Empty); } StatementSyntax[] statements = selectedStatements.ToArray(); StatementSyntax statement1 = statements[0]; StatementSyntax statement2 = statements[1]; if (statement1.ContainsDiagnostics) { return(Empty); } if (statement2.ContainsDiagnostics) { return(Empty); } SyntaxKind kind1 = statement1.Kind(); SyntaxKind kind2 = statement2.Kind(); if (kind1 == SyntaxKind.IfStatement) { if (kind2 == SyntaxKind.ReturnStatement) { var ifStatement = (IfStatementSyntax)statement1; if (ifStatement.IsSimpleIf()) { return(Analyze(ifStatement, (ReturnStatementSyntax)statement2, options, semanticModel, cancellationToken)); } } } else if (options.UseConditionalExpression) { if (kind1 == SyntaxKind.LocalDeclarationStatement) { if (kind2 == SyntaxKind.IfStatement) { return(Analyze((LocalDeclarationStatementSyntax)statement1, (IfStatementSyntax)statement2, options, semanticModel, cancellationToken)); } } else if (kind1 == SyntaxKind.ExpressionStatement && kind2 == SyntaxKind.IfStatement) { return(Analyze((ExpressionStatementSyntax)statement1, (IfStatementSyntax)statement2, options, semanticModel, cancellationToken)); } } return(Empty); }
public Task <Document> RefactorAsync( Document document, StatementListSelection selectedStatements, CancellationToken cancellationToken = default) { StatementSyntax[] statements = selectedStatements.ToArray(); int index = selectedStatements.FirstIndex; SyntaxTriviaList leadingTrivia = statements[0].GetLeadingTrivia(); SyntaxTriviaList trailingTrivia = statements[statements.Length - 1].GetTrailingTrivia(); statements[0] = statements[0].WithLeadingTrivia(); statements[statements.Length - 1] = statements[statements.Length - 1].WithTrailingTrivia(); SyntaxList <StatementSyntax> newStatements = selectedStatements.UnderlyingList; int cnt = statements.Length; while (cnt > 0) { newStatements = newStatements.RemoveAt(index); cnt--; } TStatement statement = CreateStatement(statements.ToImmutableArray()); statement = statement .WithLeadingTrivia(leadingTrivia) .WithTrailingTrivia(trailingTrivia) .WithFormatterAnnotation(); newStatements = newStatements.Insert(index, statement); return(document.ReplaceStatementsAsync(SyntaxInfo.StatementListInfo(selectedStatements), newStatements, cancellationToken)); }