check method

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

Implementation

@override
void check(DcqRegistry registry) {
  registry.addCompilationUnit((node) {
    final unit = registry.context.currentUnit;
    if (unit == null) return;

    final filePath = unit.file.path;

    // Only check files inside test/.
    final testSeg = '${p.separator}test${p.separator}';
    if (!filePath.contains(testSeg)) return;

    // Skip non-test files.
    if (!filePath.endsWith('_test.dart')) return;

    final testIndex = filePath.lastIndexOf(testSeg);
    final projectRoot = filePath.substring(0, testIndex);
    final relativePath = filePath.substring(
      testIndex + testSeg.length,
    );

    // Build expected lib path: test/src/foo_test.dart -> lib/src/foo.dart
    final baseName = p.basenameWithoutExtension(relativePath);
    if (!baseName.endsWith('_test')) return;
    final srcName = baseName.substring(0, baseName.length - 5);
    final dirName = p.dirname(relativePath);
    final libPath = p.join(projectRoot, 'lib', dirName, '$srcName.dart');

    // Note: uses dart:io directly; may not work in all analyzer host environments.
    if (!File(libPath).existsSync()) {
      final target = node.directives.isNotEmpty
          ? node.directives.first
          : node.declarations.isNotEmpty
          ? node.declarations.first
          : null;
      if (target != null) reportAtNode(target);
    }
  });
}