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.