run method
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,
) {
context.registry.addArgumentList((node) {
for (final argument in node.arguments) {
final parameter = argument.correspondingParameter;
if (parameter == null) continue;
if (!_checker.hasAnnotationOf(parameter)) continue;
final inner =
argument is NamedExpression ? argument.expression : argument;
if (!_isFunctionTyped(parameter.type)) continue;
if (inner is FunctionExpression) {
reporter.atNode(inner, code);
continue;
}
if (inner is Identifier) {
final element = inner.element;
final isSendableFn = element is TopLevelFunctionElement ||
(element is MethodElement && element.isStatic);
if (!isSendableFn) {
reporter.atNode(inner, code);
}
continue;
}
// PropertyAccess (e.g. `Foo.bar` where `bar` is a static method) is
// already an Identifier after resolution in most analyzer versions;
// anything else is conservatively rejected.
reporter.atNode(inner, code);
}
});
}