summaryrefslogtreecommitdiff
path: root/clap.zig
diff options
context:
space:
mode:
authorGravatar Komari Spaghetti2021-05-26 21:06:10 +0200
committerGravatar Komari Spaghetti2021-05-26 21:06:10 +0200
commitc7d83fcce1739271e399260b50c5f68aa03c5908 (patch)
treef859d081955e5c8c3bc329008837d351606ec19c /clap.zig
parentMerge branch 'master' into zig-master (diff)
downloadzig-clap-c7d83fcce1739271e399260b50c5f68aa03c5908.tar.gz
zig-clap-c7d83fcce1739271e399260b50c5f68aa03c5908.tar.xz
zig-clap-c7d83fcce1739271e399260b50c5f68aa03c5908.zip
Update to latest zig in preperation for 0.8.0
Diffstat (limited to 'clap.zig')
-rw-r--r--clap.zig128
1 files changed, 64 insertions, 64 deletions
diff --git a/clap.zig b/clap.zig
index 8d721fa..ee713a7 100644
--- a/clap.zig
+++ b/clap.zig
@@ -122,81 +122,81 @@ fn parseParamRest(line: []const u8) Param(Help) {
122 return .{ .id = .{ .msg = mem.trim(u8, line, " \t") } }; 122 return .{ .id = .{ .msg = mem.trim(u8, line, " \t") } };
123} 123}
124 124
125fn expectParam(expect: Param(Help), actual: Param(Help)) void { 125fn expectParam(expect: Param(Help), actual: Param(Help)) !void {
126 testing.expectEqualStrings(expect.id.msg, actual.id.msg); 126 try testing.expectEqualStrings(expect.id.msg, actual.id.msg);
127 testing.expectEqualStrings(expect.id.value, actual.id.value); 127 try testing.expectEqualStrings(expect.id.value, actual.id.value);
128 testing.expectEqual(expect.names.short, actual.names.short); 128 try testing.expectEqual(expect.names.short, actual.names.short);
129 testing.expectEqual(expect.takes_value, actual.takes_value); 129 try testing.expectEqual(expect.takes_value, actual.takes_value);
130 if (expect.names.long) |long| { 130 if (expect.names.long) |long| {
131 testing.expectEqualStrings(long, actual.names.long.?); 131 try testing.expectEqualStrings(long, actual.names.long.?);
132 } else { 132 } else {
133 testing.expectEqual(@as(?[]const u8, null), actual.names.long); 133 try testing.expectEqual(@as(?[]const u8, null), actual.names.long);
134 } 134 }
135} 135}
136 136
137test "parseParam" { 137test "parseParam" {
138 expectParam(Param(Help){ 138 try expectParam(Param(Help){
139 .id = .{ .msg = "Help text", .value = "value" }, 139 .id = .{ .msg = "Help text", .value = "value" },
140 .names = .{ .short = 's', .long = "long" }, 140 .names = .{ .short = 's', .long = "long" },
141 .takes_value = .one, 141 .takes_value = .one,
142 }, try parseParam("-s, --long <value> Help text")); 142 }, try parseParam("-s, --long <value> Help text"));
143 143
144 expectParam(Param(Help){ 144 try expectParam(Param(Help){
145 .id = .{ .msg = "Help text", .value = "value" }, 145 .id = .{ .msg = "Help text", .value = "value" },
146 .names = .{ .short = 's', .long = "long" }, 146 .names = .{ .short = 's', .long = "long" },
147 .takes_value = .many, 147 .takes_value = .many,
148 }, try parseParam("-s, --long <value>... Help text")); 148 }, try parseParam("-s, --long <value>... Help text"));
149 149
150 expectParam(Param(Help){ 150 try expectParam(Param(Help){
151 .id = .{ .msg = "Help text", .value = "value" }, 151 .id = .{ .msg = "Help text", .value = "value" },
152 .names = .{ .long = "long" }, 152 .names = .{ .long = "long" },
153 .takes_value = .one, 153 .takes_value = .one,
154 }, try parseParam("--long <value> Help text")); 154 }, try parseParam("--long <value> Help text"));
155 155
156 expectParam(Param(Help){ 156 try expectParam(Param(Help){
157 .id = .{ .msg = "Help text", .value = "value" }, 157 .id = .{ .msg = "Help text", .value = "value" },
158 .names = .{ .short = 's' }, 158 .names = .{ .short = 's' },
159 .takes_value = .one, 159 .takes_value = .one,
160 }, try parseParam("-s <value> Help text")); 160 }, try parseParam("-s <value> Help text"));
161 161
162 expectParam(Param(Help){ 162 try expectParam(Param(Help){
163 .id = .{ .msg = "Help text" }, 163 .id = .{ .msg = "Help text" },
164 .names = .{ .short = 's', .long = "long" }, 164 .names = .{ .short = 's', .long = "long" },
165 }, try parseParam("-s, --long Help text")); 165 }, try parseParam("-s, --long Help text"));
166 166
167 expectParam(Param(Help){ 167 try expectParam(Param(Help){
168 .id = .{ .msg = "Help text" }, 168 .id = .{ .msg = "Help text" },
169 .names = .{ .short = 's' }, 169 .names = .{ .short = 's' },
170 }, try parseParam("-s Help text")); 170 }, try parseParam("-s Help text"));
171 171
172 expectParam(Param(Help){ 172 try expectParam(Param(Help){
173 .id = .{ .msg = "Help text" }, 173 .id = .{ .msg = "Help text" },
174 .names = .{ .long = "long" }, 174 .names = .{ .long = "long" },
175 }, try parseParam("--long Help text")); 175 }, try parseParam("--long Help text"));
176 176
177 expectParam(Param(Help){ 177 try expectParam(Param(Help){
178 .id = .{ .msg = "Help text", .value = "A | B" }, 178 .id = .{ .msg = "Help text", .value = "A | B" },
179 .names = .{ .long = "long" }, 179 .names = .{ .long = "long" },
180 .takes_value = .one, 180 .takes_value = .one,
181 }, try parseParam("--long <A | B> Help text")); 181 }, try parseParam("--long <A | B> Help text"));
182 182
183 expectParam(Param(Help){ 183 try expectParam(Param(Help){
184 .id = .{ .msg = "Help text", .value = "A" }, 184 .id = .{ .msg = "Help text", .value = "A" },
185 .names = .{}, 185 .names = .{},
186 .takes_value = .one, 186 .takes_value = .one,
187 }, try parseParam("<A> Help text")); 187 }, try parseParam("<A> Help text"));
188 188
189 expectParam(Param(Help){ 189 try expectParam(Param(Help){
190 .id = .{ .msg = "Help text", .value = "A" }, 190 .id = .{ .msg = "Help text", .value = "A" },
191 .names = .{}, 191 .names = .{},
192 .takes_value = .many, 192 .takes_value = .many,
193 }, try parseParam("<A>... Help text")); 193 }, try parseParam("<A>... Help text"));
194 194
195 testing.expectError(error.TrailingComma, parseParam("--long, Help")); 195 try testing.expectError(error.TrailingComma, parseParam("--long, Help"));
196 testing.expectError(error.TrailingComma, parseParam("-s, Help")); 196 try testing.expectError(error.TrailingComma, parseParam("-s, Help"));
197 testing.expectError(error.InvalidShortParam, parseParam("-ss Help")); 197 try testing.expectError(error.InvalidShortParam, parseParam("-ss Help"));
198 testing.expectError(error.InvalidShortParam, parseParam("-ss <value> Help")); 198 try testing.expectError(error.InvalidShortParam, parseParam("-ss <value> Help"));
199 testing.expectError(error.InvalidShortParam, parseParam("- Help")); 199 try testing.expectError(error.InvalidShortParam, parseParam("- Help"));
200} 200}
201 201
202/// Optional diagnostics used for reporting useful errors 202/// Optional diagnostics used for reporting useful errors
@@ -227,24 +227,24 @@ pub const Diagnostic = struct {
227 } 227 }
228}; 228};
229 229
230fn testDiag(diag: Diagnostic, err: anyerror, expected: []const u8) void { 230fn testDiag(diag: Diagnostic, err: anyerror, expected: []const u8) !void {
231 var buf: [1024]u8 = undefined; 231 var buf: [1024]u8 = undefined;
232 var slice_stream = io.fixedBufferStream(&buf); 232 var slice_stream = io.fixedBufferStream(&buf);
233 diag.report(slice_stream.writer(), err) catch unreachable; 233 diag.report(slice_stream.writer(), err) catch unreachable;
234 testing.expectEqualStrings(expected, slice_stream.getWritten()); 234 try testing.expectEqualStrings(expected, slice_stream.getWritten());
235} 235}
236 236
237test "Diagnostic.report" { 237test "Diagnostic.report" {
238 testDiag(.{ .arg = "c" }, error.InvalidArgument, "Invalid argument 'c'\n"); 238 try testDiag(.{ .arg = "c" }, error.InvalidArgument, "Invalid argument 'c'\n");
239 testDiag(.{ .name = .{ .long = "cc" } }, error.InvalidArgument, "Invalid argument '--cc'\n"); 239 try testDiag(.{ .name = .{ .long = "cc" } }, error.InvalidArgument, "Invalid argument '--cc'\n");
240 testDiag(.{ .name = .{ .short = 'c' } }, error.DoesntTakeValue, "The argument '-c' does not take a value\n"); 240 try testDiag(.{ .name = .{ .short = 'c' } }, error.DoesntTakeValue, "The argument '-c' does not take a value\n");
241 testDiag(.{ .name = .{ .long = "cc" } }, error.DoesntTakeValue, "The argument '--cc' does not take a value\n"); 241 try testDiag(.{ .name = .{ .long = "cc" } }, error.DoesntTakeValue, "The argument '--cc' does not take a value\n");
242 testDiag(.{ .name = .{ .short = 'c' } }, error.MissingValue, "The argument '-c' requires a value but none was supplied\n"); 242 try testDiag(.{ .name = .{ .short = 'c' } }, error.MissingValue, "The argument '-c' requires a value but none was supplied\n");
243 testDiag(.{ .name = .{ .long = "cc" } }, error.MissingValue, "The argument '--cc' requires a value but none was supplied\n"); 243 try testDiag(.{ .name = .{ .long = "cc" } }, error.MissingValue, "The argument '--cc' requires a value but none was supplied\n");
244 testDiag(.{ .name = .{ .short = 'c' } }, error.InvalidArgument, "Invalid argument '-c'\n"); 244 try testDiag(.{ .name = .{ .short = 'c' } }, error.InvalidArgument, "Invalid argument '-c'\n");
245 testDiag(.{ .name = .{ .long = "cc" } }, error.InvalidArgument, "Invalid argument '--cc'\n"); 245 try testDiag(.{ .name = .{ .long = "cc" } }, error.InvalidArgument, "Invalid argument '--cc'\n");
246 testDiag(.{ .name = .{ .short = 'c' } }, error.SomethingElse, "Error while parsing arguments: SomethingElse\n"); 246 try testDiag(.{ .name = .{ .short = 'c' } }, error.SomethingElse, "Error while parsing arguments: SomethingElse\n");
247 testDiag(.{ .name = .{ .long = "cc" } }, error.SomethingElse, "Error while parsing arguments: SomethingElse\n"); 247 try testDiag(.{ .name = .{ .long = "cc" } }, error.SomethingElse, "Error while parsing arguments: SomethingElse\n");
248} 248}
249 249
250pub fn Args(comptime Id: type, comptime params: []const Param(Id)) type { 250pub fn Args(comptime Id: type, comptime params: []const Param(Id)) type {
@@ -338,7 +338,7 @@ pub fn helpFull(
338 const max_spacing = blk: { 338 const max_spacing = blk: {
339 var res: usize = 0; 339 var res: usize = 0;
340 for (params) |param| { 340 for (params) |param| {
341 var cs = io.countingOutStream(io.null_writer); 341 var cs = io.countingWriter(io.null_writer);
342 try printParam(cs.writer(), Id, param, Error, context, valueText); 342 try printParam(cs.writer(), Id, param, Error, context, valueText);
343 if (res < cs.bytes_written) 343 if (res < cs.bytes_written)
344 res = @intCast(usize, cs.bytes_written); 344 res = @intCast(usize, cs.bytes_written);
@@ -355,7 +355,7 @@ pub fn helpFull(
355 try stream.print("\t", .{}); 355 try stream.print("\t", .{});
356 try printParam(cs.writer(), Id, param, Error, context, valueText); 356 try printParam(cs.writer(), Id, param, Error, context, valueText);
357 try stream.writeByteNTimes(' ', max_spacing - @intCast(usize, cs.bytes_written)); 357 try stream.writeByteNTimes(' ', max_spacing - @intCast(usize, cs.bytes_written));
358 try stream.print("\t{}\n", .{try helpText(context, param)}); 358 try stream.print("\t{s}\n", .{try helpText(context, param)});
359 } 359 }
360} 360}
361 361
@@ -450,7 +450,7 @@ test "clap.help" {
450 @setEvalBranchQuota(10000); 450 @setEvalBranchQuota(10000);
451 try help( 451 try help(
452 slice_stream.writer(), 452 slice_stream.writer(),
453 comptime &[_]Param(Help){ 453 comptime &.{
454 parseParam("-a Short flag.") catch unreachable, 454 parseParam("-a Short flag.") catch unreachable,
455 parseParam("-b <V1> Short option.") catch unreachable, 455 parseParam("-b <V1> Short option.") catch unreachable,
456 parseParam("--aa Long flag.") catch unreachable, 456 parseParam("--aa Long flag.") catch unreachable,
@@ -471,7 +471,7 @@ test "clap.help" {
471 "\t-d, --dd <V3> \tBoth option.\n" ++ 471 "\t-d, --dd <V3> \tBoth option.\n" ++
472 "\t-d, --dd <V3>...\tBoth repeated option.\n"; 472 "\t-d, --dd <V3>...\tBoth repeated option.\n";
473 473
474 testing.expectEqualStrings(expected, slice_stream.getWritten()); 474 try testing.expectEqualStrings(expected, slice_stream.getWritten());
475} 475}
476 476
477/// Will print a usage message in the following format: 477/// Will print a usage message in the following format:
@@ -569,40 +569,40 @@ fn testUsage(expected: []const u8, params: []const Param(Help)) !void {
569 var buf: [1024]u8 = undefined; 569 var buf: [1024]u8 = undefined;
570 var fbs = io.fixedBufferStream(&buf); 570 var fbs = io.fixedBufferStream(&buf);
571 try usage(fbs.writer(), params); 571 try usage(fbs.writer(), params);
572 testing.expectEqualStrings(expected, fbs.getWritten()); 572 try testing.expectEqualStrings(expected, fbs.getWritten());
573} 573}
574 574
575test "usage" { 575test "usage" {
576 @setEvalBranchQuota(100000); 576 @setEvalBranchQuota(100000);
577 try testUsage("[-ab]", comptime &[_]Param(Help){ 577 try testUsage("[-ab]", &.{
578 parseParam("-a") catch unreachable, 578 try parseParam("-a"),
579 parseParam("-b") catch unreachable, 579 try parseParam("-b"),
580 }); 580 });
581 try testUsage("[-a <value>] [-b <v>]", comptime &[_]Param(Help){ 581 try testUsage("[-a <value>] [-b <v>]", &.{
582 parseParam("-a <value>") catch unreachable, 582 try parseParam("-a <value>"),
583 parseParam("-b <v>") catch unreachable, 583 try parseParam("-b <v>"),
584 }); 584 });
585 try testUsage("[--a] [--b]", comptime &[_]Param(Help){ 585 try testUsage("[--a] [--b]", &.{
586 parseParam("--a") catch unreachable, 586 try parseParam("--a"),
587 parseParam("--b") catch unreachable, 587 try parseParam("--b"),
588 }); 588 });
589 try testUsage("[--a <value>] [--b <v>]", comptime &[_]Param(Help){ 589 try testUsage("[--a <value>] [--b <v>]", &.{
590 parseParam("--a <value>") catch unreachable, 590 try parseParam("--a <value>"),
591 parseParam("--b <v>") catch unreachable, 591 try parseParam("--b <v>"),
592 }); 592 });
593 try testUsage("<file>", comptime &[_]Param(Help){ 593 try testUsage("<file>", &.{
594 parseParam("<file>") catch unreachable, 594 try parseParam("<file>"),
595 }); 595 });
596 try testUsage("[-ab] [-c <value>] [-d <v>] [--e] [--f] [--g <value>] [--h <v>] [-i <v>...] <file>", comptime &[_]Param(Help){ 596 try testUsage("[-ab] [-c <value>] [-d <v>] [--e] [--f] [--g <value>] [--h <v>] [-i <v>...] <file>", &.{
597 parseParam("-a") catch unreachable, 597 try parseParam("-a"),
598 parseParam("-b") catch unreachable, 598 try parseParam("-b"),
599 parseParam("-c <value>") catch unreachable, 599 try parseParam("-c <value>"),
600 parseParam("-d <v>") catch unreachable, 600 try parseParam("-d <v>"),
601 parseParam("--e") catch unreachable, 601 try parseParam("--e"),
602 parseParam("--f") catch unreachable, 602 try parseParam("--f"),
603 parseParam("--g <value>") catch unreachable, 603 try parseParam("--g <value>"),
604 parseParam("--h <v>") catch unreachable, 604 try parseParam("--h <v>"),
605 parseParam("-i <v>...") catch unreachable, 605 try parseParam("-i <v>..."),
606 parseParam("<file>") catch unreachable, 606 try parseParam("<file>"),
607 }); 607 });
608} 608}