factory Tagger()

in lib/src/tag/tagger.dart [127:180]


  factory Tagger(String packageDir) {
    final session = ContextBuilder()
        .createContext(
          contextRoot: ContextLocator().locateRoots(
            includedPaths: [path.normalize(packageDir)],
          ).first,
        )
        .currentSession;
    final pubspecCache = PubspecCache(session);
    final pubspec = pubspecFromDir(packageDir);

    final libDartFiles = dartFilesFromLib(packageDir);
    final nonSrcDartFiles =
        libDartFiles.where((p) => !p.startsWith('src/')).toList();

    Uri? primaryLibrary;
    if (libDartFiles.contains('${pubspec.name}.dart')) {
      primaryLibrary =
          Uri.parse('package:${pubspec.name}/${pubspec.name}.dart');
    }

    // If there is a primary library, use it as a single source for top libraries,
    // otherwise take `lib/*.dart` or (if it was empty) `lib/**/*.dart`.
    List<Uri> topLibraries;
    if (primaryLibrary != null) {
      topLibraries = <Uri>[primaryLibrary];
    } else {
      topLibraries = (nonSrcDartFiles.isEmpty ? libDartFiles : nonSrcDartFiles)
          .map((name) => Uri.parse('package:${pubspec.name}/$name'))
          .toList();
    }

    final binDir = Directory(path.join(packageDir, 'bin'));
    final allBinFiles = binDir.existsSync()
        ? binDir
            .listSync(recursive: true)
            .where((e) => e is File && e.path.endsWith('.dart'))
            .map((f) => path.relative(f.path, from: binDir.path))
            .toList()
        : <String>[];
    final isBinaryOnly = nonSrcDartFiles.isEmpty && allBinFiles.isNotEmpty;

    final publicLibraries = nonSrcDartFiles
        .map((s) => Uri.parse('package:${pubspec.name}/$s'))
        .toList();
    return Tagger._(
      pubspec.name,
      session,
      pubspecCache,
      isBinaryOnly,
      topLibraries,
      publicLibraries,
    );
  }