2016-06-13 1 views
0

J'ai rédigé un analyseur pour VS2015 à l'aide du DiagnosticAnalyzer. Il est supposé vérifier si une classe/struct qui implémente une interface spécifique fournit également un constructeur avec une signature spécifique. Je ne sais pas très bien comment enregistrer cette règle. Les deux premières règles s'appliquent uniquement à des méthodes ou des constructeurs spécifiques et fonctionnent correctement comme elles sont enregistrées, mais comment puis-je réduire le nombre de fois que cette règle de classe est appelée tout en étant appelée assez souvent pour détecter des correctifs?Enregistrement des diagnostics 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: en utilisant context.RegisterCodeBlockAction (...) semble plus approprié, mais les seuls blocs que je reçois sont la méthode et les déclarations sur le terrain.

Répondre

0

D'accord, mon mauvais, c'est assez évident. Cela fonctionne:

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