当前位置: 首页>>代码示例>>C#>>正文


C# CompilationStartAnalysisContext.RegisterSyntaxNodeAction方法代码示例

本文整理汇总了C#中CompilationStartAnalysisContext.RegisterSyntaxNodeAction方法的典型用法代码示例。如果您正苦于以下问题:C# CompilationStartAnalysisContext.RegisterSyntaxNodeAction方法的具体用法?C# CompilationStartAnalysisContext.RegisterSyntaxNodeAction怎么用?C# CompilationStartAnalysisContext.RegisterSyntaxNodeAction使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CompilationStartAnalysisContext的用法示例。


在下文中一共展示了CompilationStartAnalysisContext.RegisterSyntaxNodeAction方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: GetAnalyzer

        protected override SymbolAndNodeAnalyzer GetAnalyzer(CompilationStartAnalysisContext context, CompilationSecurityTypes types, Version targetFrameworkVersion)
        {
            SymbolAndNodeAnalyzer analyzer = new SymbolAndNodeAnalyzer(types, CSharpSyntaxNodeHelper.Default, targetFrameworkVersion);
            context.RegisterSyntaxNodeAction(analyzer.AnalyzeNode, SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration);

            return analyzer;
        }
开发者ID:bkoelman,项目名称:roslyn-analyzers,代码行数:7,代码来源:CSharpDoNotUseInsecureDtdProcessingInApiDesigner.cs

示例2: HandleCompilationStart

 /// <summary>
 /// Documentation analysis is done only on compilation start, to delay
 /// </summary>
 /// <param name="context">the compilation start action.</param>
 private void HandleCompilationStart(CompilationStartAnalysisContext context)
 {
     context.RegisterSyntaxNodeAction(
         this.HandleClassOrInterfaceDeclaration,
         SyntaxKind.InterfaceDeclaration,
         SyntaxKind.ClassDeclaration);
 }
开发者ID:jimmymain,项目名称:Documentation.Analyzers,代码行数:11,代码来源:DocumentationClassAnalyser.cs

示例3: OnCompilationStart

        private void OnCompilationStart(CompilationStartAnalysisContext context)
        {
            _candidateReadonlyFields = new HashSet<IFieldSymbol>();
            _writtenFields = new HashSet<IFieldSymbol>();

            _internalsVisibleToAttribute = context.Compilation.GetTypeByMetadataName(
                                                "System.Runtime.CompilerServices.InternalsVisibleToAttribute");

            context.RegisterSymbolAction(LocateCandidateReadonlyFields, SymbolKind.Field);
            context.RegisterSyntaxNodeAction(CheckForAssignment, s_compoundAssignmentExpressionKinds);
            context.RegisterSyntaxNodeAction(CheckForRefOrOutParameter, SyntaxKind.Argument);
            context.RegisterSyntaxNodeAction(CheckForExternMethodWithRefParameters, SyntaxKind.MethodDeclaration);
            context.RegisterSyntaxNodeAction(CheckForExternIndexer, SyntaxKind.IndexerDeclaration);
            context.RegisterSyntaxNodeAction(CheckForInvocations, SyntaxKind.InvocationExpression);
            context.RegisterCompilationEndAction(ReportUnwrittenFields);
        }
开发者ID:michaelcfanning,项目名称:codeformatter,代码行数:16,代码来源:UnwrittenWritableFieldAnalyzer.cs

示例4: GetAnalyzer

 protected override Analyzer GetAnalyzer(CompilationStartAnalysisContext context, CompilationSecurityTypes cryptTypes)
 {
     Analyzer analyzer = new Analyzer(cryptTypes);
     context.RegisterSyntaxNodeAction(analyzer.AnalyzeNode,
                                      SyntaxKind.InvocationExpression,
                                      SyntaxKind.ObjectCreationExpression);
     return analyzer;
 }
开发者ID:maggiemsft,项目名称:roslyn-analyzers,代码行数:8,代码来源:CSharpDoNotUseInsecureCyrptographicAlgorithms.cs

示例5: OnCompilationStart

 private void OnCompilationStart(CompilationStartAnalysisContext context)
 {
     var immutableArrayType = context.Compilation.GetTypeByMetadataName(ImmutableArrayMetadataName);
     if (immutableArrayType != null)
     {
         context.RegisterSyntaxNodeAction(syntaxContext => AnalyzeCall(syntaxContext, immutableArrayType), SyntaxKind.InvocationExpression);
     }
 }
开发者ID:ehsansajjad465,项目名称:roslyn,代码行数:8,代码来源:ImmutableCollectionAnalyzer.cs

示例6: OnCompilationStart

 public override void OnCompilationStart(CompilationStartAnalysisContext context)
 {
     SRSymbol = context.Compilation.GetTypeByMetadataName("System.SR");
     if (SRSymbol != null)
     {
         context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.InvocationExpression);
     }
 }
开发者ID:dsgouda,项目名称:buildtools,代码行数:8,代码来源:ResourceUsageAnalyzer.cs

示例7: OnCompilationStart

 private void OnCompilationStart(CompilationStartAnalysisContext context)
 {
     var listType = context.Compilation.GetTypeByMetadataName(IListMetadataName);
     var readonlyListType = context.Compilation.GetTypeByMetadataName(IReadOnlyListMetadataName);
     var enumerableType = context.Compilation.GetTypeByMetadataName(EnumerableMetadataName);
     if (readonlyListType != null && enumerableType != null && listType != null)
     {
         context.RegisterSyntaxNodeAction(nodeContext => AnalyzeCall(nodeContext, enumerableType, readonlyListType, listType), SyntaxKind.InvocationExpression);
     }
 }
开发者ID:ehsansajjad465,项目名称:roslyn,代码行数:10,代码来源:LinqAnalyzer.cs

示例8: RegisterAttributeAnalyzer

        protected override void RegisterAttributeAnalyzer(CompilationStartAnalysisContext context, Action onResourceFound)
        {
            context.RegisterSyntaxNodeAction(nc =>
            {
                if (!CheckAttribute(nc.Node))
                {
                    return;
                }

                if (!CheckResxGeneratedFile(nc.SemanticModel, nc.Node, ((AttributeSyntax)nc.Node).ArgumentList.Arguments[0].Expression, nc.CancellationToken))
                {
                    return;
                }

                onResourceFound();
            }, SyntaxKind.Attribute);
        }
开发者ID:duracellko,项目名称:roslyn-analyzers,代码行数:17,代码来源:CSharpMarkAssembliesWithNeutralResourcesLanguage.cs

示例9: HandleCompilationStart

 private static void HandleCompilationStart(CompilationStartAnalysisContext context)
 {
     // If SA1503 is suppressed, we need to handle compound blocks as well.
     if (context.IsAnalyzerSuppressed(SA1503BracesMustNotBeOmitted.DiagnosticId))
     {
         context.RegisterSyntaxNodeAction(HandleIfStatement, SyntaxKind.IfStatement);
         context.RegisterSyntaxNodeAction(ctx => CheckChildStatement(ctx, ctx.Node, ((DoStatementSyntax)ctx.Node).Statement), SyntaxKind.DoStatement);
         context.RegisterSyntaxNodeAction(ctx => CheckChildStatement(ctx, ctx.Node, ((WhileStatementSyntax)ctx.Node).Statement), SyntaxKind.WhileStatement);
         context.RegisterSyntaxNodeAction(ctx => CheckChildStatement(ctx, ctx.Node, ((ForStatementSyntax)ctx.Node).Statement), SyntaxKind.ForStatement);
         context.RegisterSyntaxNodeAction(ctx => CheckChildStatement(ctx, ctx.Node, ((ForEachStatementSyntax)ctx.Node).Statement), SyntaxKind.ForEachStatement);
         context.RegisterSyntaxNodeAction(ctx => CheckChildStatement(ctx, ctx.Node, ((LockStatementSyntax)ctx.Node).Statement), SyntaxKind.LockStatement);
         context.RegisterSyntaxNodeAction(ctx => CheckChildStatement(ctx, ctx.Node, ((UsingStatementSyntax)ctx.Node).Statement), SyntaxKind.UsingStatement);
         context.RegisterSyntaxNodeAction(ctx => CheckChildStatement(ctx, ctx.Node, ((FixedStatementSyntax)ctx.Node).Statement), SyntaxKind.FixedStatement);
     }
 }
开发者ID:EdwinEngelen,项目名称:StyleCopAnalyzers,代码行数:15,代码来源:SA1501StatementMustNotBeOnASingleLine.cs

示例10: AnalyzeArrayList

        private static void AnalyzeArrayList(CompilationStartAnalysisContext compilationContext)
        {
            var arrayListType = compilationContext.Compilation.GetTypeByMetadataName("System.Collections.ArrayList");

            compilationContext.RegisterSyntaxNodeAction(syntaxContext =>
            {
                var variableTypeInfo = syntaxContext.SemanticModel.GetTypeInfo(syntaxContext.Node).Type as INamedTypeSymbol;

                if (variableTypeInfo.SpecialType == SpecialType.System_String)
                {

                }

                if (variableTypeInfo == null)
                    return;

                if (variableTypeInfo.Equals(arrayListType))
                {
                    syntaxContext.ReportDiagnostic(Diagnostic.Create(Rule, syntaxContext.Node.GetLocation()));
                }
            }, SyntaxKind.ObjectCreationExpression);
        }
开发者ID:johnkoerner,项目名称:AnalyzerSamples,代码行数:22,代码来源:DontUseArrayList.cs

示例11: CreateAnalyzerWithinCompilation

 public override void CreateAnalyzerWithinCompilation(CompilationStartAnalysisContext context)
 {
     context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.PragmaWarningDirectiveTrivia);
 }
开发者ID:SoumikMukherjeeDOTNET,项目名称:roslyn,代码行数:4,代码来源:CommandLineTests.cs

示例12: TrackAssignmentsToLocalsAndPrivateFields

        private static void TrackAssignmentsToLocalsAndPrivateFields(CompilationStartAnalysisContext context, ISet<NodeAndSymbol> trackedNodesAndSymbols)
        {
            context.RegisterSyntaxNodeAction(
                c =>
                {
                    var assignment = c.Node as AssignmentExpressionSyntax;
                    if (assignment.Parent.IsKind(SyntaxKind.UsingStatement))
                    {
                        return;
                    }

                    var referencedSymbol = c.SemanticModel.GetSymbolInfo(assignment.Left).Symbol;
                    if (referencedSymbol == null || !IsLocalOrPrivateField(referencedSymbol))
                    {
                        return;
                    }

                    if (IsInstantiation(assignment.Right, c.SemanticModel))
                    {
                        trackedNodesAndSymbols.Add(new NodeAndSymbol { Node = assignment, Symbol = referencedSymbol });
                    }
                },
                SyntaxKind.SimpleAssignmentExpression);
        }
开发者ID:jakobehn,项目名称:sonarlint-vs,代码行数:24,代码来源:DisposableNotDisposed.cs

示例13: ExcludeDisposedAndClosedLocalsAndPrivateFields

        private static void ExcludeDisposedAndClosedLocalsAndPrivateFields(CompilationStartAnalysisContext context, ISet<ISymbol> excludedSymbols)
        {
            context.RegisterSyntaxNodeAction(
                c =>
                {
                    SimpleNameSyntax name;
                    ExpressionSyntax expression;

                    if (c.Node.IsKind(SyntaxKind.InvocationExpression))
                    {
                        var invocation = (InvocationExpressionSyntax)c.Node;
                        var memberAccessNode = invocation.Expression as MemberAccessExpressionSyntax;

                        name = memberAccessNode?.Name;
                        expression = memberAccessNode?.Expression;
                    }
                    else if (c.Node.IsKind(SyntaxKind.ConditionalAccessExpression))
                    {
                        var conditionalAccess = (ConditionalAccessExpressionSyntax)c.Node;
                        var invocation = conditionalAccess.WhenNotNull as InvocationExpressionSyntax;
                        if (invocation == null)
                        {
                            return;
                        }

                        var memberBindingNode = invocation.Expression as MemberBindingExpressionSyntax;

                        name = memberBindingNode?.Name;
                        expression = conditionalAccess.Expression;
                    }
                    else
                    {
                        throw new ArgumentException();
                    }

                    if (name == null || !DisposeMethods.Contains(name.Identifier.Text))
                    {
                        return;
                    }

                    var referencedSymbol = c.SemanticModel.GetSymbolInfo(expression).Symbol;
                    if (referencedSymbol != null && IsLocalOrPrivateField(referencedSymbol))
                    {
                        excludedSymbols.Add(referencedSymbol);
                    }
                },
                SyntaxKind.InvocationExpression,
                SyntaxKind.ConditionalAccessExpression);
        }
开发者ID:jakobehn,项目名称:sonarlint-vs,代码行数:49,代码来源:DisposableNotDisposed.cs

示例14: GetAnalyzer

 protected override AbstractAnalyzer GetAnalyzer(CompilationStartAnalysisContext context, INamedTypeSymbol disposableType)
 {
     Analyzer analyzer = new Analyzer(disposableType);
     context.RegisterSyntaxNodeAction(analyzer.AnalyzeNode, SyntaxKind.SimpleMemberAccessExpression, SyntaxKind.UsingStatement);
     return analyzer;
 }
开发者ID:elemk0vv,项目名称:roslyn-1,代码行数:6,代码来源:CSharpCA2213DiagnosticAnalyzer.cs

示例15: TrackInitializedLocalsAndPrivateFields

        private static void TrackInitializedLocalsAndPrivateFields(CompilationStartAnalysisContext context, ISet<NodeAndSymbol> trackedNodesAndSymbols)
        {
            context.RegisterSyntaxNodeAction(
                c =>
                {
                    VariableDeclarationSyntax declaration;
                    if (c.Node.IsKind(SyntaxKind.LocalDeclarationStatement))
                    {
                        declaration = ((LocalDeclarationStatementSyntax)c.Node).Declaration;
                    }
                    else if (c.Node.IsKind(SyntaxKind.FieldDeclaration))
                    {
                        var fieldDeclaration = (FieldDeclarationSyntax)c.Node;
                        if (!fieldDeclaration.Modifiers.Any(m => m.IsKind(SyntaxKind.PrivateKeyword)))
                        {
                            return;
                        }

                        declaration = fieldDeclaration.Declaration;
                    }
                    else
                    {
                        throw new ArgumentException();
                    }

                    foreach (var variableNode in declaration.Variables.Where(v => v.Initializer != null && IsInstantiation(v.Initializer.Value, c.SemanticModel)))
                    {
                        trackedNodesAndSymbols.Add(new NodeAndSymbol { Node = variableNode, Symbol = c.SemanticModel.GetDeclaredSymbol(variableNode) });
                    }
                },
                SyntaxKind.LocalDeclarationStatement,
                SyntaxKind.FieldDeclaration);
        }
开发者ID:jakobehn,项目名称:sonarlint-vs,代码行数:33,代码来源:DisposableNotDisposed.cs


注:本文中的CompilationStartAnalysisContext.RegisterSyntaxNodeAction方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。