tiny.smg.command.scan.json
Defined in command.scan.
API (1)
Actions
Public operations.
Source
Source: tools/smg/src/command/scan/json.zig
zig
const std = @import("std");const pretty_json = @import("pretty").json;const smg = @import("../../root.zig");const counts = smg.command.scan.counts;const hints = smg.command.scan.hints;const scan = smg.scan;pub fn render(allocator: std.mem.Allocator, stats: scan.Stats, full: bool) ![]const u8 { var out: std.Io.Writer.Allocating = .init(allocator); errdefer out.deinit(); var writer = pretty_json.Writer.init(&out.writer, .minified); try writer.beginObject(); try writer.objectField("files"); try writer.write(stats.files); try writer.objectField("nodes_added"); try writer.write(stats.nodes_added); try writer.objectField("nodes_removed"); try writer.write(stats.nodes_removed); try writer.objectField("edges_added"); try writer.write(stats.edges_added); try writer.objectField("edges_removed"); try writer.write(stats.edges_removed); try writer.objectField("skipped_edges"); try writer.write(stats.skipped_edges); try writer.objectField("skipped_edge_categories"); try statsCounts(&writer, stats.skipped_edge_categories.items); try writer.objectField("skipped_edge_advice"); try skippedAdvice(allocator, &writer, stats.skipped_edge_categories.items); try writer.objectField("languages"); try statsCounts(&writer, stats.lang_counts.items); try writer.objectField("types"); try statsCounts(&writer, stats.type_counts.items); if (full and stats.skipped_edge_samples.items.len != 0) { try writer.objectField("skipped_edge_samples"); try skippedSamples(&writer, stats.skipped_edge_samples.items); } if (full and stats.orphaned_manual_edges.items.len != 0) { try writer.objectField("orphaned_manual_edges"); try orphanedEdges(&writer, stats.orphaned_manual_edges.items); } try writer.objectField("full"); try writer.write(full); try writer.endObject(); try out.writer.writeByte('\n'); return try out.toOwnedSlice();}fn statsCounts(writer: *pretty_json.Writer, count_items: []const scan.Count) !void { try writer.beginObject(); for (count_items) |item| { try writer.objectField(item.name); try writer.write(item.count); } try writer.endObject();}fn skippedAdvice(allocator: std.mem.Allocator, writer: *pretty_json.Writer, count_items: []const scan.Count) !void { const sorted_items = try counts.sorted(allocator, count_items); try writer.beginArray(); for (sorted_items) |item| { try writer.beginObject(); try writer.objectField("category"); try writer.write(item.name); try writer.objectField("count"); try writer.write(item.count); try writer.objectField("hint"); try writer.write(hints.text(item.name)); try writer.endObject(); } try writer.endArray();}fn skippedSamples(writer: *pretty_json.Writer, samples: []const scan.SkippedEdgeSample) !void { try writer.beginArray(); for (samples) |sample| { try writer.beginObject(); try writer.objectField("source"); try writer.write(sample.source); try writer.objectField("rel"); try writer.write(sample.rel); try writer.objectField("target"); try writer.write(sample.target); try writer.objectField("reason"); try writer.write(sample.reason); try writer.objectField("category"); try writer.write(sample.category); try writer.endObject(); } try writer.endArray();}fn orphanedEdges(writer: *pretty_json.Writer, edges: []const scan.OrphanedManualEdge) !void { try writer.beginArray(); for (edges) |edge| { try writer.beginObject(); try writer.objectField("source"); try writer.write(edge.source); try writer.objectField("rel"); try writer.write(edge.rel); try writer.objectField("target"); try writer.write(edge.target); try writer.objectField("reason"); try writer.write(edge.reason); try writer.endObject(); } try writer.endArray();}Source: tools/smg/src/command/scan/root.zig:6
zig
pub const json = @import("json.zig");Audit
| Definitions | 2 |
|---|---|
| Public names | 3 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |