2016-06-13 4 views
0

DiagnosticAnalyzer를 사용하여 VS2015 용 분석기를 작성했습니다. 특정 인터페이스를 구현하는 클래스/구조체가 생성자에게 특정 서명을 제공하는지 여부도 확인해야합니다. 나는이 규칙을 어떻게 등록 할 것인가에 대해 약간의 상실감이있다.Roslyn 진단 등록

첫 번째 두 규칙은 특정 메서드 나 생성자에만 적용되며 등록 방법이 잘 작동하지만 수정본을 검색 할 수있을 정도로 자주 호출되는 동안이 클래스 전체 규칙이 호출되는 횟수를 최소화하려면 어떻게해야합니까?

public override void Initialize(AnalysisContext context) 
{ 
    // Rule A applies to any method/constructor call. 
    context.RegisterSyntaxNodeAction(LiteralInMethodCallViolation, 
    SyntaxKind.InvocationExpression); 
    context.RegisterSyntaxNodeAction(LiteralInMethodCallViolation, 
    SyntaxKind.ObjectCreationExpression); 

    // Rule B applies to entire classes/structs. 
    context.RegisterSyntaxNodeAction(MissingConstructorViolation, 
    SyntaxKind.????); 
} 

편집 : context.RegisterCodeBlockAction (...)를 사용하여 더 적절한 것 같다,하지만 내가 할 수있는 유일한 블록 방법과 필드 선언이다.

답변

0

괜찮 았어. 내 잘못이야, 분명해. 작동 방식 :

context.RegisterSyntaxNodeAction(MissingConstructorViolation, 
            SyntaxKind.ClassDeclaration); 
    context.RegisterSyntaxNodeAction(MissingConstructorViolation, 
            SyntaxKind.StructDeclaration);