2016-06-13 2 views
0

Я написал анализатор для VS2015 с помощью DiagnosticAnalyzer. Предполагается, что класс/структура, реализующая определенный интерфейс, также предоставляет конструктор с определенной сигнатурой. Я немного не понимаю, как зарегистрировать это правило.Регистрация диагностики 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.????); 
} 

Edit: с помощью context.RegisterCodeBlockAction (...) представляется более целесообразным, но только те блоки, которые я получаю, метод и полевые декларации.

ответ

0

Хорошо, мое плохое, это достаточно очевидно. Эта работа:

context.RegisterSyntaxNodeAction(MissingConstructorViolation, 
            SyntaxKind.ClassDeclaration); 
    context.RegisterSyntaxNodeAction(MissingConstructorViolation, 
            SyntaxKind.StructDeclaration); 
Смежные вопросы