run method
void
run(
- CustomLintResolver resolver,
- ErrorReporter reporter,
- 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,
) {
context.registry.addClassDeclaration((node) {
final element = node.declaredElement;
if (element == null) return;
final hasConstructorWithParameters = node.members.any(
(e) =>
e is ConstructorDeclaration && e.parameters.parameters.isNotEmpty,
);
if (!hasConstructorWithParameters) return;
final isImmutable = [
...node.metadata.map((e) => e.name.name),
...element.allSupertypes
.expand((e) => e.element.metadata)
.map((e) => e.element?.displayName)
.whereType<String>(),
].any((e) => e == 'immutable');
if (isImmutable) return;
final hasOnlyGetters =
node.members.whereType<FieldDeclaration>().every(
(e) => !e.isStatic && e.fields.isFinal,
) &&
element.allSupertypes.every((e) => e.setters.isEmpty);
if (!hasOnlyGetters) return;
reporter.atToken(node.name, _code);
});
}