check method
void
check(
- DcqRegistry registry
)
Implementation
@override
void check(DcqRegistry registry) {
registry.addInstanceCreationExpression((node) {
final typeName = node.constructorName.type.name.lexeme;
if (!typeName.contains('Provider')) return;
if (node.constructorName.name?.name == 'value') return;
// Check if there's a dispose argument.
final hasDispose = node.argumentList.arguments.any(
(a) => a is NamedExpression && a.name.label.name == 'dispose',
);
if (hasDispose) return;
// If create callback exists, flag — the provided object might need disposal.
final hasCreate = node.argumentList.arguments.any(
(a) => a is NamedExpression && a.name.label.name == 'create',
);
if (hasCreate) {
// Flag provider types whose created objects commonly need disposal.
// ChangeNotifierProvider auto-disposes ChangeNotifiers, so only
// ListenableProvider needs an explicit dispose callback.
if (typeName == 'ListenableProvider') {
reportAtNode(node.constructorName);
}
}
});
}