run method

  1. @override
void run(
  1. CustomLintResolver resolver,
  2. ErrorReporter reporter,
  3. CustomLintContext context
)

Emits lints for a given file.

run will only be invoked with files respecting filesToAnalyze

Implementation

@override
void run(
  CustomLintResolver resolver,
  ErrorReporter reporter,
  CustomLintContext context,
) {
  final path = resolver.source.fullName.replaceAll('\\', '/');
  if (_isExempt(path)) return;

  context.registry.addFieldDeclaration((node) {
    if (!node.isStatic) return;

    final keyword = node.fields.keyword?.keyword;
    if (keyword != null &&
        (keyword.lexeme == 'const' || keyword.lexeme == 'final')) {
      return;
    }

    final classDecl = node.thisOrAncestorOfType<ClassDeclaration>();
    final element = classDecl?.declaredElement;
    if (element == null) return;
    if (!_isNotifier(element)) return;

    for (final variable in node.fields.variables) {
      reporter.atNode(variable, _code);
    }
  });
}