diff options
| author | 2021-05-26 21:06:10 +0200 | |
|---|---|---|
| committer | 2021-05-26 21:06:10 +0200 | |
| commit | c7d83fcce1739271e399260b50c5f68aa03c5908 (patch) | |
| tree | f859d081955e5c8c3bc329008837d351606ec19c /clap.zig | |
| parent | Merge branch 'master' into zig-master (diff) | |
| download | zig-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.zig | 128 |
1 files changed, 64 insertions, 64 deletions
| @@ -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 | ||
| 125 | fn expectParam(expect: Param(Help), actual: Param(Help)) void { | 125 | fn 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 | ||
| 137 | test "parseParam" { | 137 | test "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 | ||
| 230 | fn testDiag(diag: Diagnostic, err: anyerror, expected: []const u8) void { | 230 | fn 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 | ||
| 237 | test "Diagnostic.report" { | 237 | test "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 | ||
| 250 | pub fn Args(comptime Id: type, comptime params: []const Param(Id)) type { | 250 | pub 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 | ||
| 575 | test "usage" { | 575 | test "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 | } |