Я написал анализатор для 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 (...) представляется более целесообразным, но только те блоки, которые я получаю, метод и полевые декларации.