internal void CodeBlockStartAction(CodeBlockStartAnalysisContext <TLanguageKindEnum> codeBlockContext)
            {
                var method = codeBlockContext.OwningSymbol as IMethodSymbol;

                if (!ShouldAnalyze(method))
                {
                    return;
                }

                foreach (IParameterSymbol param in method.Parameters)
                {
                    AnalyzeParameterDeclaration(param);
                }

                // Analyze all the Register action invocation expressions.
                codeBlockContext.RegisterSyntaxNodeAction(AnalyzeInvocation, InvocationExpressionKind);

                // Analyze all the arguments to invocations.
                codeBlockContext.RegisterSyntaxNodeAction(AnalyzeArgumentSyntax, ArgumentSyntaxKind);

                // Analyze all the lambda parameters in the method body, if any.
                codeBlockContext.RegisterSyntaxNodeAction(AnalyzerParameterSyntax, ParameterSyntaxKind);

                // Report diagnostics based on the final state.
                codeBlockContext.RegisterCodeBlockEndAction(CodeBlockEndAction);
            }
Beispiel #2
0
            public void CreateAnalyzerWithinCodeBlock(CodeBlockStartAnalysisContext <SyntaxKind> context)
            {
                var blockAnalyzer = new CodeBlockAnalyzer();

                context.RegisterCodeBlockEndAction(blockAnalyzer.AnalyzeCodeBlock);
                context.RegisterSyntaxNodeAction(blockAnalyzer.AnalyzeNode, blockAnalyzer.SyntaxKindsOfInterest.ToArray());
            }
 // Actions/CodeBlock
 private static void OnCodeBlock_Start(CodeBlockStartAnalysisContext <SyntaxKind> context)
 {
     //// SyntaxNode
     //context.RegisterSyntaxNodeAction( OnSyntaxNode, Utils.GetEnumValues<SyntaxKind>() );
     // CodeBlock
     context.RegisterCodeBlockEndAction(OnCodeBlock_End);
 }
                public void Initialize(
                    CodeBlockStartAnalysisContext <VisualBasic.SyntaxKind> analysisContext
                    )
                {
                    analysisContext.RegisterCodeBlockEndAction(
                        (context) =>
                    {
                        context.ReportDiagnostic(
                            CodeAnalysis.Diagnostic.Create(
                                s_rule,
                                context.OwningSymbol.Locations.First(),
                                messageArgs: context.OwningSymbol.Name + ":end"
                                )
                            );
                    }
                        );

                    analysisContext.RegisterSyntaxNodeAction(
                        (context) =>
                    {
                        context.ReportDiagnostic(
                            CodeAnalysis.Diagnostic.Create(
                                s_rule,
                                context.Node.GetLocation(),
                                messageArgs: context.Node.ToFullString()
                                )
                            );
                    },
                        VisualBasic.SyntaxKind.InvocationExpression
                        );
                }
Beispiel #5
0
        protected override void RegisterAnalyzer(CodeBlockStartAnalysisContext <SyntaxKind> context, CompilationSecurityTypes types, Version frameworkVersion)
        {
            CSharpAnalyzer analyzer = new CSharpAnalyzer(types, CSharpSyntaxNodeHelper.Default, frameworkVersion);

            context.RegisterSyntaxNodeAction(
                analyzer.AnalyzeNode,
                SyntaxKind.InvocationExpression,
                SyntaxKind.ObjectCreationExpression,
                SyntaxKind.SimpleAssignmentExpression,
                SyntaxKind.VariableDeclarator);
            context.RegisterCodeBlockEndAction(analyzer.AnalyzeCodeBlockEnd);
        }
Beispiel #6
0
 public void Initialize(CodeBlockStartAnalysisContext <TLanguageKindEnum> context)
 {
     _container.OnAbstractMember(
         "CodeBlockStart",
         context.CodeBlock,
         context.OwningSymbol
         );
     context.RegisterCodeBlockEndAction(_container.AnalyzeCodeBlock);
     context.RegisterSyntaxNodeAction(
         _container.AnalyzeNode,
         TestDiagnosticAnalyzer <TLanguageKindEnum> .AllSyntaxKinds.ToArray()
         );
 }
        private void AnalyzeCodeBlock(CodeBlockStartAnalysisContext <SyntaxKind> codeBlockStartContext)
        {
            if (!codeBlockStartContext.CodeBlock.IsKind(SyntaxKind.MethodDeclaration) && !codeBlockStartContext.CodeBlock.IsKind(SyntaxKind.ConstructorDeclaration))
            {
                return;
            }

            IMethodSymbol methodSymbol = codeBlockStartContext.OwningSymbol as IMethodSymbol;

            if (!(methodSymbol?.Parameters.Length > 0) || methodSymbol.IsOverride || methodSymbol.IsVirtual || methodSymbol.IsEntryPoint() || methodSymbol.ImplementsInterface())
            {
                return;
            }

            ParameterTracker tracker = new ParameterTracker(methodSymbol.Parameters);

            codeBlockStartContext.RegisterCodeBlockEndAction(codeBlockContext => tracker.ReportUnusedParameters(codeBlockContext));
            codeBlockStartContext.RegisterSyntaxNodeAction(nodeContext => tracker.TryDiscardReferencedParameter(nodeContext), SyntaxKind.IdentifierName);
        }
 // Actions/CodeBlock
 private static void OnCodeBlock_Start(CodeBlockStartAnalysisContext <SyntaxKind> context)
 {
     context.RegisterCodeBlockEndAction(OnCodeBlock_End);
 }
                public void Initialize(CodeBlockStartAnalysisContext<VisualBasic.SyntaxKind> analysisContext)
                {
                    analysisContext.RegisterCodeBlockEndAction(
                        (context) =>
                            {
                                context.ReportDiagnostic(CodeAnalysis.Diagnostic.Create(s_rule, context.OwningSymbol.Locations.First(), messageArgs: context.OwningSymbol.Name + ":end"));
                            });

                    analysisContext.RegisterSyntaxNodeAction(
                        (context) =>
                            {
                                context.ReportDiagnostic(CodeAnalysis.Diagnostic.Create(s_rule, context.Node.GetLocation(), messageArgs: context.Node.ToFullString()));
                            },
                        VisualBasic.SyntaxKind.InvocationExpression);
                }