check method

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

Implementation

@override
void check(
  DcqRegistry registry,
) {
  registry.addClassDeclaration((node) {
    if (node.abstractKeyword != null) return;

    final effectiveClassPattern =
        configString(ruleConfig, 'class-name-pattern') ?? '';
    if (effectiveClassPattern.isNotEmpty) {
      if (!RegExp(
        effectiveClassPattern,
      ).hasMatch(node.namePart.typeName.lexeme)) {
        return;
      }
    }
    final effectiveFilePattern =
        configString(ruleConfig, 'file-name-pattern') ?? '';
    if (effectiveFilePattern.isNotEmpty) {
      final path = registry.context.currentUnit?.file.path ?? '';
      final fileName = path.split('/').last;
      if (!RegExp(effectiveFilePattern).hasMatch(fileName)) return;
    }

    final superclass = node.extendsClause?.superclass;
    if (superclass != null &&
        _widgetSuperclasses.contains(superclass.name.lexeme) &&
        isFromExpectedPackage(superclass, 'flutter')) {
      return;
    }

    final fieldCount = _countFinalInstanceFields(node);
    if (fieldCount < 2) return;

    final classBody = node.body;
    if (classBody is! BlockClassBody) return;
    final hasCopyWith = classBody.members.any(
      (member) =>
          member is MethodDeclaration && member.name.lexeme == 'copyWith',
    );
    if (hasCopyWith) return;

    reportAtToken(node.namePart.typeName);
  });
}