handleCommand function

Future<void> handleCommand(
  1. List<String> arguments, {
  2. bool verbose = false,
})

Handles the 'report' command execution.

Parses the report command arguments and executes coverage report generation.

arguments: Arguments for the report command. verbose: Whether verbose output is enabled.

Implementation

Future<void> handleCommand(
  List<String> arguments, {
  bool verbose = false,
}) async {
  final reportParser = buildParser();

  try {
    var results = reportParser.parse(arguments);

    // Handle report-specific help
    if (results.flag('help')) {
      printUsage(reportParser);
      return;
    }

    // Resolve preset if specified
    final preset = resolvePreset(
      results: results,
      arguments: arguments,
      parser: reportParser,
      commandPath: ['report'],
    );
    results = preset.results;

    if (verbose) {
      print('[VERBOSE] Report arguments: $arguments');
      if (preset.resolvedArguments != null) {
        print('[VERBOSE] Report resolved arguments: '
            '${preset.resolvedArguments}');
      }
    }

    // Parse fail-under option
    double? failUnder;
    if (results.option('fail-under') != null) {
      try {
        failUnder = double.parse(results.option('fail-under')!);
        if (failUnder < 0 || failUnder > 100) {
          stderr.writeln('Error: fail-under must be between 0 and 100');
          exit(1);
        }
      } on Object catch (_) {
        stderr.writeln('Error: fail-under must be a valid number');
        exit(1);
      }
    }

    // Create configuration
    final config = ReportConfig(
      inputPath: results.option('input')!,
      outputPath: results.option('output'),
      excludePatterns: results.multiOption('exclude'),
      excludeLinePatterns: results.multiOption('exclude-line'),
      uncoveredOnly: results.flag('uncovered-only'),
      failUnder: failUnder,
      summary: results.flag('summary'),
      noFilter: results.flag('no-filter'),
    );

    await runReport(config);
  } on FormatException catch (e) {
    stderr.writeln('Error: ${e.message}');
    print('');
    printUsage(reportParser);
    exit(1);
  }
}