summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clap.zig21
1 files changed, 11 insertions, 10 deletions
diff --git a/clap.zig b/clap.zig
index bbf7de1..302c8bb 100644
--- a/clap.zig
+++ b/clap.zig
@@ -30,11 +30,8 @@ pub const Names = struct {
30 pub fn longest(names: *const Names) Longest { 30 pub fn longest(names: *const Names) Longest {
31 if (names.long) |long| 31 if (names.long) |long|
32 return .{ .kind = .long, .name = long }; 32 return .{ .kind = .long, .name = long };
33 if (names.short) |*short| { 33 if (names.short) |*short|
34 // TODO: Zig cannot figure out @as(*const [1]u8, short) in the ano literal 34 return .{ .kind = .short, .name = @as(*const [1]u8, short) };
35 const casted: *const [1]u8 = short;
36 return .{ .kind = .short, .name = casted };
37 }
38 35
39 return .{ .kind = .positional, .name = "" }; 36 return .{ .kind = .positional, .name = "" };
40 } 37 }
@@ -801,13 +798,14 @@ fn parseArg(
801 }; 798 };
802 799
803 const longest = comptime param.names.longest(); 800 const longest = comptime param.names.longest();
801 const name = longest.name[0..longest.name.len].*;
804 switch (longest.kind) { 802 switch (longest.kind) {
805 .short, .long => switch (param.takes_value) { 803 .short, .long => switch (param.takes_value) {
806 .none => @field(arguments, longest.name) +|= 1, 804 .none => @field(arguments, &name) +|= 1,
807 .one => @field(arguments, longest.name) = try parser(arg.value.?), 805 .one => @field(arguments, &name) = try parser(arg.value.?),
808 .many => { 806 .many => {
809 const value = try parser(arg.value.?); 807 const value = try parser(arg.value.?);
810 try @field(arguments, longest.name).append(allocator, value); 808 try @field(arguments, &name).append(allocator, value);
811 }, 809 },
812 }, 810 },
813 .positional => try positionals.append(try parser(arg.value.?)), 811 .positional => try positionals.append(try parser(arg.value.?)),
@@ -920,8 +918,9 @@ fn Arguments(
920 }, 918 },
921 }; 919 };
922 920
921 const name = longest.name[0..longest.name.len].*;
923 fields[i] = .{ 922 fields[i] = .{
924 .name = longest.name, 923 .name = &name,
925 .type = @TypeOf(default_value), 924 .type = @TypeOf(default_value),
926 .default_value = @ptrCast(&default_value), 925 .default_value = @ptrCast(&default_value),
927 .is_comptime = false, 926 .is_comptime = false,
@@ -960,12 +959,13 @@ test "everything" {
960 \\-b, --bb 959 \\-b, --bb
961 \\-c, --cc <str> 960 \\-c, --cc <str>
962 \\-d, --dd <usize>... 961 \\-d, --dd <usize>...
962 \\-h
963 \\<str> 963 \\<str>
964 \\ 964 \\
965 ); 965 );
966 966
967 var iter = args.SliceIterator{ 967 var iter = args.SliceIterator{
968 .args = &.{ "-a", "--aa", "-c", "0", "something", "-d", "1", "--dd", "2" }, 968 .args = &.{ "-a", "--aa", "-c", "0", "something", "-d", "1", "--dd", "2", "-h" },
969 }; 969 };
970 var res = try parseEx(Help, &params, parsers.default, &iter, .{ 970 var res = try parseEx(Help, &params, parsers.default, &iter, .{
971 .allocator = testing.allocator, 971 .allocator = testing.allocator,
@@ -974,6 +974,7 @@ test "everything" {
974 974
975 try testing.expect(res.args.aa == 2); 975 try testing.expect(res.args.aa == 2);
976 try testing.expect(res.args.bb == 0); 976 try testing.expect(res.args.bb == 0);
977 try testing.expect(res.args.h == 1);
977 try testing.expectEqualStrings("0", res.args.cc.?); 978 try testing.expectEqualStrings("0", res.args.cc.?);
978 try testing.expectEqual(@as(usize, 1), res.positionals.len); 979 try testing.expectEqual(@as(usize, 1), res.positionals.len);
979 try testing.expectEqualStrings("something", res.positionals[0]); 980 try testing.expectEqualStrings("something", res.positionals[0]);