private void AnalyzeIfStatement(SyntaxNodeAnalysisContext context) { if (GeneratedCodeAnalyzer?.IsGeneratedCode(context) == true) { return; } if (context.Node.Parent?.IsKind(SyntaxKind.ElseClause) == true) { return; } var ifStatement = (IfStatementSyntax)context.Node; if (ifStatement.Else != null) { var result = new IfElseAnalysisResult(ifStatement); if (result.AddBraces) { context.ReportDiagnostic( DiagnosticDescriptors.AddBracesToIfElse, ifStatement.GetLocation()); } if (result.RemoveBraces) { context.ReportDiagnostic( DiagnosticDescriptors.RemoveBracesFromIfElse, ifStatement.GetLocation()); RemoveBracesFromIfElseFadeOut(context, ifStatement); } } MergeIfStatementWithNestedIfStatementAnalyzer.Analyze(context, ifStatement); SimplifyIfStatementToReturnStatementAnalyzer.Analyze(context); if (SimplifyIfElseStatementRefactoring.CanRefactor(ifStatement, context.SemanticModel, context.CancellationToken) && !ifStatement.SpanContainsDirectives()) { context.ReportDiagnostic( DiagnosticDescriptors.SimplifyIfElseStatement, ifStatement.GetLocation()); } }
public static Task <Document> RefactorAsync( Document document, IfStatementSyntax ifStatement, CancellationToken cancellationToken = default(CancellationToken)) { IfStatementSyntax nestedIf = MergeIfStatementWithNestedIfStatementAnalyzer.GetNestedIfStatement(ifStatement); ExpressionSyntax left = ifStatement.Condition.Parenthesize(); ExpressionSyntax right = nestedIf.Condition; if (!right.IsKind(SyntaxKind.LogicalAndExpression)) { right = right.Parenthesize(); } BinaryExpressionSyntax newCondition = CSharpFactory.LogicalAndExpression(left, right); IfStatementSyntax newNode = GetNewIfStatement(ifStatement, nestedIf) .WithCondition(newCondition) .WithFormatterAnnotation(); return(document.ReplaceNodeAsync(ifStatement, newNode, cancellationToken)); }