check method

  1. @override
void check(
  1. DcqRegistry registry
)

Implementation

@override
void check(DcqRegistry registry) {
  var hasBlocImport = false;
  registry.addImportDirective((node) {
    final uri = node.uri.stringValue;
    if (uri != null && uri.startsWith('package:flutter_bloc/')) {
      hasBlocImport = true;
    }
  });

  final pendingNodes = <ConstructorName>[];

  registry.addInstanceCreationExpression((node) {
    final name = node.constructorName.type.name.lexeme;
    if (name != 'BlocBuilder' && name != 'BlocConsumer') return;
    final hasBuildWhen = node.argumentList.arguments.any(
      (a) => a is NamedExpression && a.name.label.name == 'buildWhen',
    );
    if (!hasBuildWhen) pendingNodes.add(node.constructorName);
  });

  registry.afterLibrary(() {
    if (!hasBlocImport) return;
    for (final node in pendingNodes) {
      reportAtNode(node);
    }
  });
}