aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJosh Wolfe <thejoshwolfe@gmail.com>2023-07-21 19:56:46 -0400
committerGitHub <noreply@github.com>2023-07-21 19:56:46 -0400
commit8924f81d8cd96f5a69a54d87119a748247079a09 (patch)
tree4dcb427921a41d3c75d3f3f4b79937d406c0a8a6 /src
parenta2d81c547ccdb1130c4f55bb736d82f97902a3dd (diff)
downloadzig-8924f81d8cd96f5a69a54d87119a748247079a09.tar.gz
zig-8924f81d8cd96f5a69a54d87119a748247079a09.zip
std.json: Unify stringify and writeStream (#16405)
Diffstat (limited to 'src')
-rw-r--r--src/Autodoc.zig129
-rw-r--r--src/print_env.zig15
-rw-r--r--src/print_targets.zig37
3 files changed, 56 insertions, 125 deletions
diff --git a/src/Autodoc.zig b/src/Autodoc.zig
index 2a4fb1d151..ae4c859934 100644
--- a/src/Autodoc.zig
+++ b/src/Autodoc.zig
@@ -385,10 +385,11 @@ pub fn generateZirData(self: *Autodoc) !void {
\\ /** @type {{DocData}} */
\\ var zigAnalysis=
, .{});
- try std.json.stringify(
+ try std.json.stringifyArbitraryDepth(
+ arena_allocator.allocator(),
data,
.{
- .whitespace = .{ .indent = .none, .separator = false },
+ .whitespace = .minified,
.emit_null_optional_fields = true,
},
out,
@@ -532,28 +533,16 @@ const DocData = struct {
ret: Expr,
};
- pub fn jsonStringify(
- self: DocData,
- opts: std.json.StringifyOptions,
- w: anytype,
- ) !void {
- var jsw = std.json.writeStream(w, 15);
- jsw.whitespace = opts.whitespace;
+ pub fn jsonStringify(self: DocData, jsw: anytype) !void {
try jsw.beginObject();
inline for (comptime std.meta.tags(std.meta.FieldEnum(DocData))) |f| {
const f_name = @tagName(f);
try jsw.objectField(f_name);
switch (f) {
- .files => try writeFileTableToJson(self.files, self.modules, &jsw),
- .guide_sections => try writeGuidesToJson(self.guide_sections, &jsw),
- .modules => {
- try std.json.stringify(self.modules.values(), opts, w);
- jsw.state_index -= 1;
- },
- else => {
- try std.json.stringify(@field(self, f_name), opts, w);
- jsw.state_index -= 1;
- },
+ .files => try writeFileTableToJson(self.files, self.modules, jsw),
+ .guide_sections => try writeGuidesToJson(self.guide_sections, jsw),
+ .modules => try jsw.write(self.modules.values()),
+ else => try jsw.write(@field(self, f_name)),
}
}
try jsw.endObject();
@@ -583,24 +572,14 @@ const DocData = struct {
value: usize,
};
- pub fn jsonStringify(
- self: DocModule,
- opts: std.json.StringifyOptions,
- w: anytype,
- ) !void {
- var jsw = std.json.writeStream(w, 15);
- jsw.whitespace = opts.whitespace;
-
+ pub fn jsonStringify(self: DocModule, jsw: anytype) !void {
try jsw.beginObject();
inline for (comptime std.meta.tags(std.meta.FieldEnum(DocModule))) |f| {
const f_name = @tagName(f);
try jsw.objectField(f_name);
switch (f) {
- .table => try writeModuleTableToJson(self.table, &jsw),
- else => {
- try std.json.stringify(@field(self, f_name), opts, w);
- jsw.state_index -= 1;
- },
+ .table => try writeModuleTableToJson(self.table, jsw),
+ else => try jsw.write(@field(self, f_name)),
}
}
try jsw.endObject();
@@ -617,18 +596,10 @@ const DocData = struct {
is_uns: bool = false, // usingnamespace
parent_container: ?usize, // index into `types`
- pub fn jsonStringify(
- self: Decl,
- opts: std.json.StringifyOptions,
- w: anytype,
- ) !void {
- var jsw = std.json.writeStream(w, 15);
- jsw.whitespace = opts.whitespace;
+ pub fn jsonStringify(self: Decl, jsw: anytype) !void {
try jsw.beginArray();
inline for (comptime std.meta.fields(Decl)) |f| {
- try jsw.arrayElem();
- try std.json.stringify(@field(self, f.name), opts, w);
- jsw.state_index -= 1;
+ try jsw.write(@field(self, f.name));
}
try jsw.endArray();
}
@@ -644,18 +615,10 @@ const DocData = struct {
fields: ?[]usize = null, // index into astNodes
@"comptime": bool = false,
- pub fn jsonStringify(
- self: AstNode,
- opts: std.json.StringifyOptions,
- w: anytype,
- ) !void {
- var jsw = std.json.writeStream(w, 15);
- jsw.whitespace = opts.whitespace;
+ pub fn jsonStringify(self: AstNode, jsw: anytype) !void {
try jsw.beginArray();
inline for (comptime std.meta.fields(AstNode)) |f| {
- try jsw.arrayElem();
- try std.json.stringify(@field(self, f.name), opts, w);
- jsw.state_index -= 1;
+ try jsw.write(@field(self, f.name));
}
try jsw.endArray();
}
@@ -776,27 +739,18 @@ const DocData = struct {
docs: []const u8,
};
- pub fn jsonStringify(
- self: Type,
- opts: std.json.StringifyOptions,
- w: anytype,
- ) !void {
+ pub fn jsonStringify(self: Type, jsw: anytype) !void {
const active_tag = std.meta.activeTag(self);
- var jsw = std.json.writeStream(w, 15);
- jsw.whitespace = opts.whitespace;
try jsw.beginArray();
- try jsw.arrayElem();
- try jsw.emitNumber(@intFromEnum(active_tag));
+ try jsw.write(@intFromEnum(active_tag));
inline for (comptime std.meta.fields(Type)) |case| {
if (@field(Type, case.name) == active_tag) {
const current_value = @field(self, case.name);
inline for (comptime std.meta.fields(case.type)) |f| {
- try jsw.arrayElem();
if (f.type == std.builtin.Type.Pointer.Size) {
- try jsw.emitNumber(@intFromEnum(@field(current_value, f.name)));
+ try jsw.write(@intFromEnum(@field(current_value, f.name)));
} else {
- try std.json.stringify(@field(current_value, f.name), opts, w);
- jsw.state_index -= 1;
+ try jsw.write(@field(current_value, f.name));
}
}
}
@@ -919,14 +873,8 @@ const DocData = struct {
val: WalkResult,
};
- pub fn jsonStringify(
- self: Expr,
- opts: std.json.StringifyOptions,
- w: anytype,
- ) @TypeOf(w).Error!void {
+ pub fn jsonStringify(self: Expr, jsw: anytype) !void {
const active_tag = std.meta.activeTag(self);
- var jsw = std.json.writeStream(w, 15);
- jsw.whitespace = opts.whitespace;
try jsw.beginObject();
if (active_tag == .declIndex) {
try jsw.objectField("declRef");
@@ -935,14 +883,17 @@ const DocData = struct {
}
switch (self) {
.int => {
- if (self.int.negated) try w.writeAll("-");
- try jsw.emitNumber(self.int.value);
+ if (self.int.negated) {
+ try jsw.write(-@as(i65, self.int.value));
+ } else {
+ try jsw.write(self.int.value);
+ }
},
.builtinField => {
- try jsw.emitString(@tagName(self.builtinField));
+ try jsw.write(@tagName(self.builtinField));
},
.declRef => {
- try jsw.emitNumber(self.declRef.Analyzed);
+ try jsw.write(self.declRef.Analyzed);
},
else => {
inline for (comptime std.meta.fields(Expr)) |case| {
@@ -952,14 +903,7 @@ const DocData = struct {
if (comptime std.mem.eql(u8, case.name, "declRef"))
continue;
if (@field(Expr, case.name) == active_tag) {
- try std.json.stringify(@field(self, case.name), opts, w);
- jsw.state_index -= 1;
- // TODO: we should not reach into the state of the
- // json writer, but alas, this is what's
- // necessary with the current api.
- // would be nice to have a proper integration
- // between the json writer and the generic
- // std.json.stringify implementation
+ try jsw.write(@field(self, case.name));
}
}
},
@@ -5440,12 +5384,9 @@ fn writeFileTableToJson(
try jsw.beginArray();
var it = map.iterator();
while (it.next()) |entry| {
- try jsw.arrayElem();
try jsw.beginArray();
- try jsw.arrayElem();
- try jsw.emitString(entry.key_ptr.*.sub_file_path);
- try jsw.arrayElem();
- try jsw.emitNumber(mods.getIndex(entry.key_ptr.*.pkg) orelse 0);
+ try jsw.write(entry.key_ptr.*.sub_file_path);
+ try jsw.write(mods.getIndex(entry.key_ptr.*.pkg) orelse 0);
try jsw.endArray();
}
try jsw.endArray();
@@ -5462,21 +5403,19 @@ fn writeGuidesToJson(sections: std.ArrayListUnmanaged(Section), jsw: anytype) !v
for (sections.items) |s| {
// section name
- try jsw.arrayElem();
try jsw.beginObject();
try jsw.objectField("name");
- try jsw.emitString(s.name);
+ try jsw.write(s.name);
try jsw.objectField("guides");
// section value
try jsw.beginArray();
for (s.guides.items) |g| {
- try jsw.arrayElem();
try jsw.beginObject();
try jsw.objectField("name");
- try jsw.emitString(g.name);
+ try jsw.write(g.name);
try jsw.objectField("body");
- try jsw.emitString(g.body);
+ try jsw.write(g.body);
try jsw.endObject();
}
try jsw.endArray();
@@ -5494,7 +5433,7 @@ fn writeModuleTableToJson(
var it = map.valueIterator();
while (it.next()) |entry| {
try jsw.objectField(entry.name);
- try jsw.emitNumber(entry.value);
+ try jsw.write(entry.value);
}
try jsw.endObject();
}
diff --git a/src/print_env.zig b/src/print_env.zig
index 58da854989..cf4720c5f2 100644
--- a/src/print_env.zig
+++ b/src/print_env.zig
@@ -28,26 +28,27 @@ pub fn cmdEnv(gpa: Allocator, args: []const []const u8, stdout: std.fs.File.Writ
var bw = std.io.bufferedWriter(stdout);
const w = bw.writer();
- var jws = std.json.writeStream(w, 6);
+ var jws = std.json.writeStream(w, .{ .whitespace = .indent_1 });
+
try jws.beginObject();
try jws.objectField("zig_exe");
- try jws.emitString(self_exe_path);
+ try jws.write(self_exe_path);
try jws.objectField("lib_dir");
- try jws.emitString(zig_lib_directory.path.?);
+ try jws.write(zig_lib_directory.path.?);
try jws.objectField("std_dir");
- try jws.emitString(zig_std_dir);
+ try jws.write(zig_std_dir);
try jws.objectField("global_cache_dir");
- try jws.emitString(global_cache_dir);
+ try jws.write(global_cache_dir);
try jws.objectField("version");
- try jws.emitString(build_options.version);
+ try jws.write(build_options.version);
try jws.objectField("target");
- try jws.emitString(triple);
+ try jws.write(triple);
try jws.endObject();
try w.writeByte('\n');
diff --git a/src/print_targets.zig b/src/print_targets.zig
index 62e1d3b158..bfb2ac0177 100644
--- a/src/print_targets.zig
+++ b/src/print_targets.zig
@@ -40,31 +40,28 @@ pub fn cmdTargets(
var bw = io.bufferedWriter(stdout);
const w = bw.writer();
- var jws = std.json.writeStream(w, 6);
+ var jws = std.json.writeStream(w, .{ .whitespace = .indent_1 });
try jws.beginObject();
try jws.objectField("arch");
try jws.beginArray();
for (meta.fieldNames(Target.Cpu.Arch)) |field| {
- try jws.arrayElem();
- try jws.emitString(field);
+ try jws.write(field);
}
try jws.endArray();
try jws.objectField("os");
try jws.beginArray();
for (meta.fieldNames(Target.Os.Tag)) |field| {
- try jws.arrayElem();
- try jws.emitString(field);
+ try jws.write(field);
}
try jws.endArray();
try jws.objectField("abi");
try jws.beginArray();
for (meta.fieldNames(Target.Abi)) |field| {
- try jws.arrayElem();
- try jws.emitString(field);
+ try jws.write(field);
}
try jws.endArray();
@@ -75,19 +72,16 @@ pub fn cmdTargets(
@tagName(libc.arch), @tagName(libc.os), @tagName(libc.abi),
});
defer allocator.free(tmp);
- try jws.arrayElem();
- try jws.emitString(tmp);
+ try jws.write(tmp);
}
try jws.endArray();
try jws.objectField("glibc");
try jws.beginArray();
for (glibc_abi.all_versions) |ver| {
- try jws.arrayElem();
-
const tmp = try std.fmt.allocPrint(allocator, "{}", .{ver});
defer allocator.free(tmp);
- try jws.emitString(tmp);
+ try jws.write(tmp);
}
try jws.endArray();
@@ -102,8 +96,7 @@ pub fn cmdTargets(
for (arch.allFeaturesList(), 0..) |feature, i_usize| {
const index = @as(Target.Cpu.Feature.Set.Index, @intCast(i_usize));
if (model.features.isEnabled(index)) {
- try jws.arrayElem();
- try jws.emitString(feature.name);
+ try jws.write(feature.name);
}
}
try jws.endArray();
@@ -118,8 +111,7 @@ pub fn cmdTargets(
try jws.objectField(@tagName(arch));
try jws.beginArray();
for (arch.allFeaturesList()) |feature| {
- try jws.arrayElem();
- try jws.emitString(feature.name);
+ try jws.write(feature.name);
}
try jws.endArray();
}
@@ -131,17 +123,17 @@ pub fn cmdTargets(
const triple = try native_target.zigTriple(allocator);
defer allocator.free(triple);
try jws.objectField("triple");
- try jws.emitString(triple);
+ try jws.write(triple);
}
{
try jws.objectField("cpu");
try jws.beginObject();
try jws.objectField("arch");
- try jws.emitString(@tagName(native_target.cpu.arch));
+ try jws.write(@tagName(native_target.cpu.arch));
try jws.objectField("name");
const cpu = native_target.cpu;
- try jws.emitString(cpu.model.name);
+ try jws.write(cpu.model.name);
{
try jws.objectField("features");
@@ -149,8 +141,7 @@ pub fn cmdTargets(
for (native_target.cpu.arch.allFeaturesList(), 0..) |feature, i_usize| {
const index = @as(Target.Cpu.Feature.Set.Index, @intCast(i_usize));
if (cpu.features.isEnabled(index)) {
- try jws.arrayElem();
- try jws.emitString(feature.name);
+ try jws.write(feature.name);
}
}
try jws.endArray();
@@ -158,9 +149,9 @@ pub fn cmdTargets(
try jws.endObject();
}
try jws.objectField("os");
- try jws.emitString(@tagName(native_target.os.tag));
+ try jws.write(@tagName(native_target.os.tag));
try jws.objectField("abi");
- try jws.emitString(@tagName(native_target.abi));
+ try jws.write(@tagName(native_target.abi));
try jws.endObject();
try jws.endObject();