parseAnalyzeJson function

AnalyzeSummary parseAnalyzeJson(
  1. String stdout
)

Parses a single JSON object line or full JSON from dart analyze.

Implementation

AnalyzeSummary parseAnalyzeJson(String stdout) {
  final trimmed = stdout.trim();
  if (trimmed.isEmpty) {
    return AnalyzeSummary(
      diagnosticsByCode: {},
      countBySeverity: {},
      rawExitCode: 0,
    );
  }

  final decoded = jsonDecode(trimmed);
  if (decoded is! Map<String, dynamic>) {
    throw const FormatException('Expected JSON object at root');
  }

  final version = decoded['version'];
  final diagnostics = decoded['diagnostics'];
  if (diagnostics is! List) {
    throw FormatException('Unexpected analyze JSON (version: $version)');
  }

  final byCode = <String, int>{};
  final bySeverity = <String, int>{};

  for (final item in diagnostics) {
    if (item is! Map<String, dynamic>) continue;
    final code = item['code']?.toString() ?? 'unknown';
    final severity = item['severity']?.toString() ?? 'UNKNOWN';
    byCode[code] = (byCode[code] ?? 0) + 1;
    bySeverity[severity] = (bySeverity[severity] ?? 0) + 1;
  }

  return AnalyzeSummary(
    diagnosticsByCode: byCode,
    countBySeverity: bySeverity,
    rawExitCode: 0,
  );
}