execute method

  1. @override
Future<int> execute(
  1. List<String> args
)
override

Public method or function.

Implementation

@override
/// Public method or function.
Future<int> execute(List<String> args) async {
  final projectPath = args.isNotEmpty
      ? args.first
      : fileSystem.currentDirectory;

  if (!fileSystem.exists(projectPath) ||
      !fileSystem.isDirectory(projectPath)) {
    terminal.writeError('Project path does not exist: $projectPath');
    return AppConstants.exitInternalFailure;
  }

  terminal.writeLine('Diagnosing Firebase setup in $projectPath...');
  terminal.writeLine('');

  final context = AnalyzerContext(
    projectPath: projectPath,
    fileSystem: fileSystem,
  );

  List<DiagnosticResult> results;
  try {
    results = await analyzerService.runAll(context);
  } catch (e) {
    terminal.writeError('Diagnosis failed: $e');
    return AppConstants.exitInternalFailure;
  }

  for (final result in results) {
    _printAnalyzerHeader(result);

    if (result.issues.isEmpty) {
      terminal.writeSuccess('  No issues found.');
      terminal.writeLine('');
      continue;
    }

    for (final issue in result.issues) {
      _printIssue(issue);
    }
    terminal.writeLine('');
  }

  _printSummary(results);

  // Deterministic exit codes
  final report = DiagnosticReport(
    projectName: '',
    projectPath: '',
    createdAt: DateTime.now(),
    results: results,
  );
  return report.exitCode;
}