run method

  1. @override
Future<int> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<int> run() async {
  final scanner = ProjectScanner();
  final context = scanner.scan();

  if (context == null) {
    print('✗ Current directory is not a Flutter project.');
    return 1;
  }

  final registry = const AuditRegistry();
  final engine = AuditEngine(audits: registry.getAudits());
  final rawResults = await engine.run(context);

  final ignoreConfig = await IgnoreConfigHelper.load(context);
  final (results, suppressedCount) = ignoreConfig.apply(rawResults, context);

  if (suppressedCount > 0) {
    print(
      'ⓘ $suppressedCount finding(s) suppressed by .flutter_auditor_ignore.yaml',
    );
    print('');
  }

  final reporter = const ConsoleReporter();

  final verbose = argResults!.flag('verbose');
  final failOnArg = argResults!.option('fail-on')!;
  final failOn = failOnArg == 'none'
      ? null
      : Severity.values.firstWhere((severity) => severity.name == failOnArg);

  final exitCode = reporter.printReport(
    results,
    context: context,
    verbose: verbose,
    failOn: failOn,
  );

  final htmlPath = argResults!.option('html');
  if (htmlPath != null) {
    final htmlReporter = const HtmlReporter();
    final file = htmlReporter.writeReport(
      results,
      context: context,
      outputPath: htmlPath,
    );
    print('');
    print('📊 HTML report written to: ${file.path}');

    if (argResults!.flag('open')) {
      await _openInBrowser(file.path);
    }
  }

  return exitCode;
}