check method

  1. @override
void check(
  1. 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);
      }
    }
  });
}