runProjectCommand method

  1. @override
Future<void> runProjectCommand()
override

Implementation

@override
Future<void> runProjectCommand() async {
  final engine = DoctorEngine(context);
  final result = await engine.runAllScans();

  final scoreEngine = ScoreEngine(context);
  final catScores = scoreEngine.calculateDetailedScore(result.issues);
  final totalScore = scoreEngine.calculateTotalScore(catScores);

  final report = ReportModel(
    totalScore: totalScore,
    categoryScores: catScores,
    issues: result.issues,
    metrics: result.metrics,
  );

  bool genJson = argResults?['json'] as bool? ?? false;
  bool genHtml = argResults?['html'] as bool? ?? false;
  bool genMarkdown = argResults?['markdown'] as bool? ?? false;
  bool genCsv = argResults?['csv'] as bool? ?? false;

  // Fallback to config if no flags provided
  if (!genJson && !genHtml && !genMarkdown && !genCsv) {
    genJson = context.config.reportJson;
    genHtml = context.config.reportHtml;
    genMarkdown = context.config.reportMarkdown;
    genCsv = context.config.reportCsv;
  }

  // Default to all if still nothing is selected
  if (!genJson && !genHtml && !genMarkdown && !genCsv) {
    genJson = true;
    genHtml = true;
    genMarkdown = true;
    genCsv = true;
  }

  final reporter = ReportGenerator(context);
  await reporter.generateSpecific(
    report: report,
    json: genJson,
    html: genHtml,
    markdown: genMarkdown,
    csv: genCsv,
  );

  context.logger.success(
    'Reports generated successfully in .flutter_doctor_pro/reports/',
  );
}