check method
void
check(
- DcqRegistry registry
)
Implementation
@override
void check(DcqRegistry registry) {
var hasProviderImport = false;
registry.addImportDirective((node) {
final uri = node.uri.stringValue;
if (uri != null && uri.startsWith('package:provider/')) {
hasProviderImport = true;
}
});
final pendingNodes = <ConstructorName>[];
registry.addInstanceCreationExpression((node) {
final typeName = node.constructorName.type.name.lexeme;
if (typeName != 'ChangeNotifierProvider' &&
typeName != 'Provider' &&
typeName != 'StateNotifierProvider') {
return;
}
if (node.constructorName.name?.name != 'value') return;
final valueArg = node.argumentList.arguments
.whereType<NamedExpression>()
.where((a) => a.name.label.name == 'value')
.firstOrNull;
if (valueArg != null &&
valueArg.expression is InstanceCreationExpression) {
pendingNodes.add(node.constructorName);
}
});
registry.afterLibrary(() {
if (!hasProviderImport) return;
for (final node in pendingNodes) {
reportAtNode(node);
}
});
}