getUsedPackages method

Future<Set<String>> getUsedPackages()

Implementation

Future<Set<String>> getUsedPackages() async {
  final usedPackages = <String>{};

  for (final dir in directoriesToAnalyze) {
    print("📂 Analisando diretório: $dir");

    List<File> dartFiles = [];

    // Se for bin/, usamos listSync diretamente
    if (dir == 'bin') {
      final binDir = Directory(dir);
      if (binDir.existsSync()) {
        dartFiles.addAll(binDir.listSync(recursive: true).whereType<File>().where((file) => file.path.endsWith('.dart')));
      }
    } else {
      dartFiles.addAll(Glob("$dir/**/*.dart").listSync().whereType<File>());
    }

    for (final file in dartFiles) {
      print("📄 Arquivo encontrado: ${file.path}");

      if (_shouldIgnore(file.path)) continue;

      final content = file.readAsStringSync();
      final parseResult = parseString(content: content, throwIfDiagnostics: false);

      for (var directive in parseResult.unit.directives.whereType<ImportDirective>()) {
        final uri = directive.uri.stringValue;
        if (uri != null && uri.startsWith('package:')) {
          final packageName = uri.split('/')[0].replaceFirst('package:', '');
          usedPackages.add(packageName);
        }
      }
    }
  }

  return usedPackages;
}