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. --- README.md | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 2e64264..8db67c9 100644 --- a/README.md +++ b/README.md @@ -77,10 +77,7 @@ 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); - diag.report(&stderr.interface, err) catch {}; - try stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); return err; }; defer res.deinit(); @@ -144,10 +141,7 @@ pub fn main() !void { // allowed. .assignment_separators = "=:", }) catch |err| { - var buf: [1024]u8 = undefined; - var stderr = std.fs.File.stderr().writer(&buf); - diag.report(&stderr.interface, err) catch {}; - try stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); return err; }; defer res.deinit(); @@ -217,10 +211,7 @@ 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); - diag.report(&stderr.interface, err) catch {}; - try stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); return err; }; defer res.deinit(); @@ -256,10 +247,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); - diag.report(&stderr.interface, err) catch {}; - try stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); return err; // propagate error }; defer res.deinit(); @@ -320,10 +308,7 @@ 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); - diag.report(&stderr.interface, err) catch {}; - try stderr.interface.flush(); + try diag.reportToFile(.stderr(), err); return err; }) |arg| { // arg.param will point to the parameter which matched the argument. -- cgit v1.2.3