private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
        {
            if (GeneratedCodeAnalyzer?.IsGeneratedCode(context) == true)
            {
                return;
            }

            var elseClause = (ElseClauseSyntax)context.Node;

            StatementSyntax statement = elseClause.Statement;

            if (statement != null)
            {
                if (!statement.IsKind(SyntaxKind.Block) &&
                    !statement.IsKind(SyntaxKind.IfStatement) &&
                    elseClause.ElseKeyword.GetSpanStartLine() == statement.GetSpanStartLine())
                {
                    context.ReportDiagnostic(
                        DiagnosticDescriptors.FormatEmbeddedStatementOnSeparateLine,
                        statement.GetLocation());
                }

                if (statement.IsKind(SyntaxKind.Block))
                {
                    var block = (BlockSyntax)statement;

                    if (block.Statements.Count == 0)
                    {
                        if (elseClause.ElseKeyword.TrailingTrivia.IsWhitespaceOrEndOfLine() &&
                            block.OpenBraceToken.LeadingTrivia.IsWhitespaceOrEndOfLine() &&
                            block.OpenBraceToken.TrailingTrivia.IsWhitespaceOrEndOfLine() &&
                            block.CloseBraceToken.LeadingTrivia.IsWhitespaceOrEndOfLine())
                        {
                            context.ReportDiagnostic(
                                DiagnosticDescriptors.RemoveEmptyElseClause,
                                elseClause.GetLocation());
                        }
                    }
                    else if (block.Statements.Count == 1)
                    {
                        if (block.Statements[0].IsKind(SyntaxKind.IfStatement))
                        {
                            var ifStatement = (IfStatementSyntax)block.Statements[0];

                            if (ifStatement.Else == null)
                            {
                                context.ReportDiagnostic(
                                    DiagnosticDescriptors.SimplifyElseClauseContainingIfStatement,
                                    block.GetLocation());

                                DiagnosticHelper.FadeOutBraces(
                                    context,
                                    block,
                                    DiagnosticDescriptors.SimplifyElseClauseContainingIfStatementFadeOut);
                            }
                        }
                    }
                }
            }
        }
        private void AnalyzeStatement(SyntaxNodeAnalysisContext context)
        {
            if (GeneratedCodeAnalyzer?.IsGeneratedCode(context) == true)
            {
                return;
            }

            if (!context.Node.IsKind(SyntaxKind.IfStatement) ||
                IfElseChainAnalysis.IsIsolatedIf((IfStatementSyntax)context.Node))
            {
                BlockSyntax block = EmbeddedStatementAnalysis.GetBlockThatCanBeEmbeddedStatement(context.Node);

                if (block != null &&
                    !block.OpenBraceToken.IsMissing &&
                    !block.CloseBraceToken.IsMissing &&
                    block.OpenBraceToken.LeadingTrivia.IsWhitespaceOrEndOfLine() &&
                    block.OpenBraceToken.TrailingTrivia.IsWhitespaceOrEndOfLine() &&
                    block.CloseBraceToken.LeadingTrivia.IsWhitespaceOrEndOfLine() &&
                    block.CloseBraceToken.TrailingTrivia.IsWhitespaceOrEndOfLine())
                {
                    context.ReportDiagnostic(
                        DiagnosticDescriptors.RemoveBracesFromStatement,
                        block.GetLocation());

                    DiagnosticHelper.FadeOutBraces(context, block, DiagnosticDescriptors.RemoveBracesFromStatementFadeOut);
                }
            }
        }
Beispiel #3
0
        private static void FadeOut(SyntaxNodeAnalysisContext context, BlockSyntax block)
        {
            DiagnosticDescriptor descriptor = DiagnosticDescriptors.SimplifyLambdaExpressionFadeOut;

            DiagnosticHelper.FadeOutBraces(context, block, descriptor);

            if (block.Statements[0].IsKind(SyntaxKind.ReturnStatement))
            {
                DiagnosticHelper.FadeOutToken(context, ((ReturnStatementSyntax)block.Statements[0]).ReturnKeyword, descriptor);
            }
        }
Beispiel #4
0
 private static void RemoveBracesFromStatementFadeOut(SyntaxNodeAnalysisContext context, IfStatementSyntax ifStatement)
 {
     foreach (SyntaxNode node in ifStatement.DescendantNodes())
     {
         if (node.IsKind(SyntaxKind.Block))
         {
             DiagnosticHelper.FadeOutBraces(
                 context,
                 (BlockSyntax)node,
                 DiagnosticDescriptors.RemoveBracesFromStatementFadeOut);
         }
     }
 }
Beispiel #5
0
        private static void FadeOut(
            SyntaxNodeAnalysisContext context,
            IfStatementSyntax ifStatement,
            IfStatementSyntax ifStatement2)
        {
            DiagnosticHelper.FadeOutToken(context, ifStatement2.IfKeyword, DiagnosticDescriptors.MergeIfStatementWithContainedIfStatementFadeOut);
            DiagnosticHelper.FadeOutToken(context, ifStatement2.OpenParenToken, DiagnosticDescriptors.MergeIfStatementWithContainedIfStatementFadeOut);
            DiagnosticHelper.FadeOutToken(context, ifStatement2.CloseParenToken, DiagnosticDescriptors.MergeIfStatementWithContainedIfStatementFadeOut);

            if (ifStatement.Statement.IsKind(SyntaxKind.Block) &&
                ifStatement2.Statement.IsKind(SyntaxKind.Block))
            {
                DiagnosticHelper.FadeOutBraces(context, (BlockSyntax)ifStatement2.Statement, DiagnosticDescriptors.MergeIfStatementWithContainedIfStatementFadeOut);
            }
        }
Beispiel #6
0
        private static bool AnalyzeBlock(SyntaxNodeAnalysisContext context, BlockSyntax block, bool checkTrivia = true)
        {
            if (block == null)
            {
                return(false);
            }

            SyntaxList <StatementSyntax> statements = block.Statements;

            if (statements.Count == 0)
            {
                return(false);
            }

            var returnStatement = statements[0] as ReturnStatementSyntax;

            if (returnStatement == null)
            {
                return(false);
            }

            if (returnStatement.Expression == null)
            {
                return(false);
            }

            if (checkTrivia && block
                .DescendantTrivia(descendIntoTrivia: true)
                .Any(f => !f.IsWhitespaceOrEndOfLine()))
            {
                return(false);
            }

            if (!returnStatement.IsSingleline())
            {
                return(false);
            }

            context.ReportDiagnostic(
                DiagnosticDescriptors.UseExpressionBodiedMember,
                block.GetLocation());

            DiagnosticHelper.FadeOutToken(context, returnStatement.ReturnKeyword, DiagnosticDescriptors.UseExpressionBodiedMemberFadeOut);
            DiagnosticHelper.FadeOutBraces(context, block, DiagnosticDescriptors.UseExpressionBodiedMemberFadeOut);

            return(true);
        }
Beispiel #7
0
        private static void AnalyzeAccessorList(SyntaxNodeAnalysisContext context, AccessorListSyntax accessorList)
        {
            if (accessorList == null)
            {
                return;
            }

            SyntaxList <AccessorDeclarationSyntax> accessors = accessorList.Accessors;

            if (accessors.Count != 1)
            {
                return;
            }

            AccessorDeclarationSyntax accessor = accessors[0];

            if (accessor.Body == null)
            {
                return;
            }

            if (!accessor.IsKind(SyntaxKind.GetAccessorDeclaration))
            {
                return;
            }

            if (accessor.AttributeLists.Count != 0)
            {
                return;
            }

            if (accessor.Body
                .DescendantTrivia(descendIntoTrivia: true)
                .Any(f => !f.IsWhitespaceOrEndOfLine()))
            {
                return;
            }

            if (AnalyzeBlock(context, accessor.Body, checkTrivia: false))
            {
                DiagnosticHelper.FadeOutToken(context, accessor.Keyword, DiagnosticDescriptors.UseExpressionBodiedMemberFadeOut);
                DiagnosticHelper.FadeOutBraces(context, accessorList, DiagnosticDescriptors.UseExpressionBodiedMemberFadeOut);
            }
        }
        private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
        {
            if (GeneratedCodeAnalyzer?.IsGeneratedCode(context) == true)
            {
                return;
            }

            var usingStatement = (UsingStatementSyntax)context.Node;

            if (RemoveBracesFromNestedUsingStatementRefactoring.CanRefactor(usingStatement))
            {
                var block = (BlockSyntax)usingStatement.Statement;

                context.ReportDiagnostic(
                    DiagnosticDescriptors.SimplifyNestedUsingStatement,
                    block.GetLocation());

                DiagnosticHelper.FadeOutBraces(context, block, DiagnosticDescriptors.SimplifyNestedUsingStatementFadeOut);
            }
        }