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. --- clap.zig | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'clap.zig') diff --git a/clap.zig b/clap.zig index 3863087..c4dd801 100644 --- a/clap.zig +++ b/clap.zig @@ -563,12 +563,20 @@ pub const Diagnostic = struct { else => try stream.print("Error while parsing arguments: {s}\n", .{@errorName(err)}), } } + + /// Wrapper around `report`, which writes to a file in a buffered manner + pub fn reportToFile(diag: Diagnostic, file: std.fs.File, err: anyerror) !void { + var buf: [1024]u8 = undefined; + var writer = file.writer(&buf); + try diag.report(&writer.interface, err); + return writer.end(); + } }; fn testDiag(diag: Diagnostic, err: anyerror, expected: []const u8) !void { var buf: [1024]u8 = undefined; var writer = std.Io.Writer.fixed(&buf); - diag.report(&writer, err) catch unreachable; + try diag.report(&writer, err); try std.testing.expectEqualStrings(expected, writer.buffered()); } @@ -1264,7 +1272,7 @@ fn testErr( }) catch |err| { var buf: [1024]u8 = undefined; var writer = std.Io.Writer.fixed(&buf); - diag.report(&writer, err) catch return error.TestFailed; + try diag.report(&writer, err); try std.testing.expectEqualStrings(expected, writer.buffered()); return; }; -- cgit v1.2.3