parseAnalyzeJson function
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,
);
}