check method

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

Implementation

@override
void check(DcqRegistry registry) {
  final ignoredParameters =
      configStringList(ruleConfig, 'ignored-parameters') ?? const [];
  final ignoredArguments =
      configStringList(ruleConfig, 'ignored-arguments') ?? const [];
  final ignoreInline =
      configBool(ruleConfig, 'ignore-inline-functions') ?? false;

  void checkArgs(ArgumentList argumentList, Expression node) {
    final args = argumentList.arguments;
    if (args.length < 2) return;

    final seen = <String>{};
    for (final arg in args) {
      if (arg is NamedExpression &&
          ignoredParameters.contains(arg.name.label.name)) {
        continue;
      }

      final source = arg is NamedExpression
          ? arg.expression.toSource()
          : arg.toSource();

      if (_isSimpleLiteral(source)) continue;
      if (ignoredArguments.contains(source)) continue;
      if (ignoreInline && arg is FunctionExpression) continue;
      if (ignoreInline &&
          arg is NamedExpression &&
          arg.expression is FunctionExpression) {
        continue;
      }

      if (!seen.add(source)) {
        reportAtNode(node);
        return;
      }
    }
  }

  registry.addMethodInvocation((node) {
    checkArgs(node.argumentList, node);
  });
  registry.addFunctionExpressionInvocation((node) {
    checkArgs(node.argumentList, node);
  });
  registry.addInstanceCreationExpression((node) {
    checkArgs(node.argumentList, node);
  });
}