check method

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

Implementation

@override
void check(
  DcqRegistry registry,
) {
  final ignoreEnums = configBool(ruleConfig, 'ignore-enums') ?? false;

  registry.addMethodInvocation((node) {
    if (node.methodName.name != 'toString') return;
    if (node.argumentList.arguments.isNotEmpty) return;

    final target = node.target;
    if (target == null) return;

    final targetType = target.staticType;
    if (targetType is! InterfaceType) return;

    final elementName = targetType.element.name;
    if (elementName == 'Object' || elementName == 'dynamic') return;

    if (ignoreEnums && targetType.element is EnumElement) return;

    if (!_hasToStringOverride(targetType)) {
      reportAtNode(node);
    }
  });

  registry.addStringInterpolation((node) {
    for (final element in node.elements) {
      if (element is! InterpolationExpression) continue;
      final expression = element.expression;
      final type = expression.staticType;
      if (type is! InterfaceType) continue;

      final typeName = type.element.name;
      if (typeName == 'Object' || typeName == 'dynamic') continue;
      if (typeName == 'String' ||
          typeName == 'int' ||
          typeName == 'double' ||
          typeName == 'num' ||
          typeName == 'bool') {
        continue;
      }

      if (ignoreEnums && type.element is EnumElement) continue;

      if (!_hasToStringOverride(type)) {
        reportAtNode(expression);
      }
    }
  });
}