From 095409eb0421f0f970c246b371b39dab2ff912aa Mon Sep 17 00:00:00 2001 From: Jimmi Holst Christensen Date: Tue, 22 Jul 2025 10:44:11 +0200 Subject: feat: Add `Diagnostic.reportToFile` The code for reporting errors became quite verbose after writegate. Reporting to stderr is very common, so this wrapper provides a default, buffered way to report to a file. --- example/simple-ex.zig | 5 +---- example/simple.zig | 6 ++---- example/streaming-clap.zig | 6 ++---- example/subcommands.zig | 11 +++-------- 4 files changed, 8 insertions(+), 20 deletions(-) (limited to 'example') diff --git a/example/simple-ex.zig b/example/simple-ex.zig index a993868..77d8d09 100644 --- a/example/simple-ex.zig +++ b/example/simple-ex.zig @@ -32,10 +32,7 @@ pub fn main() !void { .assignment_separators = "=:", }) catch |err| { // Report useful error and exit. - var buf: [1024]u8 = undefined; - var stderr = std.fs.File.stderr().writer(&buf); - try diag.report(&stderr.interface, err); - try stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); return err; }; defer res.deinit(); diff --git a/example/simple.zig b/example/simple.zig index ca6bd75..1834396 100644 --- a/example/simple.zig +++ b/example/simple.zig @@ -21,10 +21,8 @@ pub fn main() !void { .allocator = gpa.allocator(), }) catch |err| { // Report useful error and exit. - var buf: [1024]u8 = undefined; - var stderr = std.fs.File.stderr().writer(&buf); - try diag.report(&stderr.interface, err); - return stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); + return err; }; defer res.deinit(); diff --git a/example/streaming-clap.zig b/example/streaming-clap.zig index d60167c..4cd6962 100644 --- a/example/streaming-clap.zig +++ b/example/streaming-clap.zig @@ -34,10 +34,8 @@ pub fn main() !void { // Because we use a streaming parser, we have to consume each argument parsed individually. while (parser.next() catch |err| { // Report useful error and exit. - var buf: [1024]u8 = undefined; - var stderr = std.fs.File.stderr().writer(&buf); - try diag.report(&stderr.interface, err); - return stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); + return err; }) |arg| { // arg.param will point to the parameter which matched the argument. switch (arg.param.id) { diff --git a/example/subcommands.zig b/example/subcommands.zig index 644e371..7d9f5f1 100644 --- a/example/subcommands.zig +++ b/example/subcommands.zig @@ -41,10 +41,8 @@ pub fn main() !void { // not fully consumed. It can then be reused to parse the arguments for subcommands. .terminating_positional = 0, }) catch |err| { - var buf: [1024]u8 = undefined; - var stderr = std.fs.File.stderr().writer(&buf); - try diag.report(&stderr.interface, err); - return stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); + return err; }; defer res.deinit(); @@ -79,10 +77,7 @@ fn mathMain(gpa: std.mem.Allocator, iter: *std.process.ArgIterator, main_args: M .diagnostic = &diag, .allocator = gpa, }) catch |err| { - var buf: [1024]u8 = undefined; - var stderr = std.fs.File.stderr().writer(&buf); - try diag.report(&stderr.interface, err); - try stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); return err; // propagate error }; defer res.deinit(); -- cgit v1.2.3