Exemple #1
0
        private static ReturnStatementSyntax CreateReturnStatement(IfStatementSyntax ifStatement)
        {
            LiteralExpressionSyntax booleanLiteral = SimplifyIfStatementToReturnStatementAnalyzer.GetBooleanLiteral(ifStatement.Statement);

            ExpressionSyntax expression = ifStatement.Condition;

            if (booleanLiteral.IsKind(SyntaxKind.FalseLiteralExpression))
            {
                expression = expression.Negate();
            }

            return(SyntaxFactory.ReturnStatement(
                       SyntaxFactory.Token(SyntaxKind.ReturnKeyword).WithTrailingSpace(),
                       expression,
                       SyntaxFactory.Token(SyntaxKind.SemicolonToken)));
        }
        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());
            }
        }
Exemple #3
0
        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 IfElseChainAnalysisResult(ifStatement);

                if (result.AddBracesToChain)
                {
                    context.ReportDiagnostic(
                        DiagnosticDescriptors.AddBracesToIfElseChain,
                        ifStatement.GetLocation());
                }

                if (result.RemoveBracesFromChain)
                {
                    context.ReportDiagnostic(
                        DiagnosticDescriptors.RemoveBracesFromIfElseChain,
                        ifStatement.GetLocation());

                    RemoveBracesFromStatementFadeOut(context, ifStatement);
                }
            }

            MergeIfStatementWithContainedIfStatementAnalyzer.Analyze(context, ifStatement);

            SimplifyIfStatementToReturnStatementAnalyzer.Analyze(context);
        }
        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)));
            }
        }