run method

  1. @override
void run(
  1. CustomLintResolver resolver,
  2. DiagnosticReporter 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,
  DiagnosticReporter reporter,
  CustomLintContext context,
) {
  if (isGeneratedFile(resolver.path)) return;
  if (!RigidConfig.forFile(resolver.path).isEnabled(code.name)) return;
  // Only run on test files.
  if (!isTestFile(resolver.path)) return;

  context.registry.addCompilationUnit((unit) {
    var hasTestBlock = false;
    var hasExpect = false;

    void visit(AstNode node) {
      if (node is MethodInvocation) {
        final name = node.methodName.name;
        if (name == 'test' || name == 'testWidgets' || name == 'group') {
          hasTestBlock = true;
        }
        if (name == 'expect' || name == 'expectLater' ||
            name == 'expectAsync0' || name == 'expectAsync1' ||
            name == 'verify' || name == 'verifyInOrder' ||
            name == 'verifyNever') {
          hasExpect = true;
        }
      }
      // Short-circuit if we found both.
      if (hasTestBlock && hasExpect) return;
      node.childEntities.whereType<AstNode>().forEach(visit);
    }

    visit(unit);

    if (hasTestBlock && !hasExpect) {
      reporter.atNode(unit, code);
    }
  });
}