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;
  if (isTestFile(resolver.path)) return;

  context.registry.addMethodInvocation((node) {
    // Check for ListView.builder / ListView.separated patterns.
    final methodName = node.methodName.name;
    final target = node.target;

    // ListView.builder(..., itemBuilder: (ctx, i) => Widget(...))
    if (target is SimpleIdentifier &&
        target.name == 'ListView' &&
        (methodName == 'builder' || methodName == 'separated')) {
      _checkItemBuilder(node, reporter);
      return;
    }

    // someList.map((item) => Widget(...))
    if (methodName == 'map') {
      _checkMapCallback(node, reporter);
      return;
    }
  });

  // List.generate(n, (i) => Widget(...))
  context.registry.addInstanceCreationExpression((node) {
    final name = node.constructorName.type.name.lexeme;
    if (name == 'List') {
      final constructorName = node.constructorName.name?.name;
      if (constructorName == 'generate') {
        _checkGenerateCallback(node, reporter);
      }
    }
  });
}