diff options
| author | 2025-07-22 10:44:11 +0200 | |
|---|---|---|
| committer | 2025-07-22 10:44:11 +0200 | |
| commit | 095409eb0421f0f970c246b371b39dab2ff912aa (patch) | |
| tree | 08ed3d08575d8a3b2613874a01dc7f98312bf272 /clap.zig | |
| parent | Update to Zig 0.15.0-dev.1147 (diff) | |
| download | zig-clap-095409eb0421f0f970c246b371b39dab2ff912aa.tar.gz zig-clap-095409eb0421f0f970c246b371b39dab2ff912aa.tar.xz zig-clap-095409eb0421f0f970c246b371b39dab2ff912aa.zip | |
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.
Diffstat (limited to '')
| -rw-r--r-- | clap.zig | 12 |
1 files changed, 10 insertions, 2 deletions
| @@ -563,12 +563,20 @@ pub const Diagnostic = struct { | |||
| 563 | else => try stream.print("Error while parsing arguments: {s}\n", .{@errorName(err)}), | 563 | else => try stream.print("Error while parsing arguments: {s}\n", .{@errorName(err)}), |
| 564 | } | 564 | } |
| 565 | } | 565 | } |
| 566 | |||
| 567 | /// Wrapper around `report`, which writes to a file in a buffered manner | ||
| 568 | pub fn reportToFile(diag: Diagnostic, file: std.fs.File, err: anyerror) !void { | ||
| 569 | var buf: [1024]u8 = undefined; | ||
| 570 | var writer = file.writer(&buf); | ||
| 571 | try diag.report(&writer.interface, err); | ||
| 572 | return writer.end(); | ||
| 573 | } | ||
| 566 | }; | 574 | }; |
| 567 | 575 | ||
| 568 | fn testDiag(diag: Diagnostic, err: anyerror, expected: []const u8) !void { | 576 | fn testDiag(diag: Diagnostic, err: anyerror, expected: []const u8) !void { |
| 569 | var buf: [1024]u8 = undefined; | 577 | var buf: [1024]u8 = undefined; |
| 570 | var writer = std.Io.Writer.fixed(&buf); | 578 | var writer = std.Io.Writer.fixed(&buf); |
| 571 | diag.report(&writer, err) catch unreachable; | 579 | try diag.report(&writer, err); |
| 572 | try std.testing.expectEqualStrings(expected, writer.buffered()); | 580 | try std.testing.expectEqualStrings(expected, writer.buffered()); |
| 573 | } | 581 | } |
| 574 | 582 | ||
| @@ -1264,7 +1272,7 @@ fn testErr( | |||
| 1264 | }) catch |err| { | 1272 | }) catch |err| { |
| 1265 | var buf: [1024]u8 = undefined; | 1273 | var buf: [1024]u8 = undefined; |
| 1266 | var writer = std.Io.Writer.fixed(&buf); | 1274 | var writer = std.Io.Writer.fixed(&buf); |
| 1267 | diag.report(&writer, err) catch return error.TestFailed; | 1275 | try diag.report(&writer, err); |
| 1268 | try std.testing.expectEqualStrings(expected, writer.buffered()); | 1276 | try std.testing.expectEqualStrings(expected, writer.buffered()); |
| 1269 | return; | 1277 | return; |
| 1270 | }; | 1278 | }; |