formatDirectory function

Future<void> formatDirectory(
  1. String directory
)

Formats all Dart files in the given directory using optimized parallel processing

Implementation

Future<void> formatDirectory(String directory) async {
  final stopwatch = Stopwatch()..start();

  try {
    // Get all .dart files in parallel using compute
    final dartFiles = await Directory(directory)
        .list(recursive: true)
        .where((entity) => entity is File && entity.path.endsWith('.dart'))
        .map((entity) => entity.path)
        .toList();

    if (dartFiles.isEmpty) {
      printWarning('No Dart files found in $directory');
      return;
    }

    final totalFiles = dartFiles.length;
    var formattedFiles = 0;
    var failedFiles = 0;

    // Create batches of files for concurrent processing
    final batches = <List<String>>[];
    for (var i = 0; i < dartFiles.length; i += _concurrentOperations) {
      batches.add(dartFiles.sublist(
        i,
        i + _concurrentOperations > dartFiles.length
            ? dartFiles.length
            : i + _concurrentOperations,
      ));
    }

    // Process batches
    for (final batch in batches) {
      final results = await Future.wait(
        batch.map((file) => _formatFile(file)),
        eagerError: false,
      );

      // Update counters
      final successCount = results.where((success) => success).length;
      formattedFiles += successCount;
      failedFiles += results.length - successCount;

      // Update progress every _progressBatchSize batches
      if (formattedFiles % _progressBatchSize == 0 ||
          formattedFiles == totalFiles) {
        printProgress(
            '\rFormatting: $formattedFiles/$totalFiles files (${(formattedFiles / totalFiles * 100).toStringAsFixed(1)}%)');
      }
    }

    // Final status
    final duration = stopwatch.elapsed;
    print('\n'); // New line after progress
    printSuccess('''
Formatting completed in ${duration.inSeconds}.${duration.inMilliseconds % 1000}s
✓ Successfully formatted: $formattedFiles files
${failedFiles > 0 ? '✗ Failed to format: $failedFiles files' : ''}
''');
  } catch (e) {
    printError('Error formatting directory $directory: $e');
  }
}