check method

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

Implementation

@override
void check(DcqRegistry registry) {
  final ignoredInvocations =
      configStringList(ruleConfig, 'ignored-invocations') ?? const [];
  final ignoredTargets =
      configStringList(ruleConfig, 'ignored-targets') ?? const [];
  final ignoreLiterals = configBool(ruleConfig, 'ignore-literals') ?? false;
  final threshold =
      2 + (configInt(ruleConfig, 'allowed-duplicated-chains') ?? 0);

  void checkBody(FunctionBody body) {
    final collector = _ExpressionCollector(
      ignoredInvocations: ignoredInvocations,
      ignoredTargets: ignoredTargets,
      ignoreLiterals: ignoreLiterals,
    );
    body.accept(collector);

    final reported = <String>{};
    for (final entry in collector.expressions.entries) {
      if (entry.value.length >= threshold && reported.add(entry.key)) {
        for (final node in entry.value.skip(1)) {
          reportAtNode(node);
        }
      }
    }
  }

  registry.addMethodDeclaration((node) {
    checkBody(node.body);
  });

  registry.addFunctionDeclaration((node) {
    checkBody(node.functionExpression.body);
  });
}