check method

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

Implementation

@override
void check(
  DcqRegistry registry,
) {
  registry.addCompilationUnit((node) {
    final widgetClasses = <ClassDeclaration>[];

    for (final declaration in node.declarations) {
      if (declaration is ClassDeclaration) {
        final isPrivate = declaration.namePart.typeName.lexeme.startsWith(
          '_',
        );
        if (isPrivate &&
            (configBool(ruleConfig, 'ignore-private-widgets') ?? false)) {
          continue;
        }

        if ((configBool(ruleConfig, 'ignore-visible-for-testing') ?? false) &&
            declaration.metadata.any(
              (a) => a.name.name == 'visibleForTesting',
            )) {
          continue;
        }

        final superclass = declaration.extendsClause?.superclass;
        if (superclass != null &&
            _widgetBaseClasses.contains(superclass.name.lexeme) &&
            _isFromExpectedPackageForClass(superclass)) {
          widgetClasses.add(declaration);
        }
      }
    }

    if (widgetClasses.length < 2) return;

    for (final widget in widgetClasses.skip(1)) {
      reportAtToken(widget.namePart.typeName);
    }
  });
}