execute method

Future<Set<String>> execute({
  1. bool fix = false,
  2. Set<String>? dependenciesToRemove,
})

Executes the dependency analysis.

If fix is true, it will also attempt to remove the unused dependencies listed in dependenciesToRemove.

Returns a set of unused dependencies.

Implementation

Future<Set<String>> execute({
  bool fix = false,
  Set<String>? dependenciesToRemove,
}) async {
  // 1. Retrieve all dependencies from pubspec.yaml
  final allDependencies = await repository.getAllDependencies();
  // 2. Retrieve only the used dependencies from the project
  final usedDependencies = await repository.getUsedDependencies();

  // 3. Find unused dependencies
  final unusedDependencies = allDependencies.difference(usedDependencies);

  if (unusedDependencies.isEmpty) {
    print('✅ No unused dependencies found!');
    return unusedDependencies;
  }

  print('⚠️ Unused dependencies found:');
  for (var package in unusedDependencies) {
    print('   - $package');
  }

  // 4. If `fix` is true, remove only the provided dependenciesToRemove (if specified)
  final finalDependenciesToRemove =
      dependenciesToRemove ?? unusedDependencies;

  if (fix && finalDependenciesToRemove.isNotEmpty) {
    await repository.removeUnusedDependencies(finalDependenciesToRemove);
    print('🚀 Unused dependencies removed successfully!');
  }

  return unusedDependencies;
}