cli: invert special case arg parsing logic

Invert special case logic so that we can add additional cases. The
previous logic bailed if we weren't the only special case ('-e').
This commit is contained in:
Tim Culverhouse
2023-12-18 12:34:32 -06:00
parent b711ac8a42
commit 5946bc1a53

View File

@ -1630,35 +1630,37 @@ pub fn finalize(self: *Config) !void {
/// Callback for src/cli/args.zig to allow us to handle special cases /// Callback for src/cli/args.zig to allow us to handle special cases
/// like `--help` or `-e`. Returns "false" if the CLI parsing should halt. /// like `--help` or `-e`. Returns "false" if the CLI parsing should halt.
pub fn parseManuallyHook(self: *Config, alloc: Allocator, arg: []const u8, iter: anytype) !bool { pub fn parseManuallyHook(self: *Config, alloc: Allocator, arg: []const u8, iter: anytype) !bool {
// If it isn't "-e" then we just continue parsing normally. if (std.mem.eql(u8, arg, "-e")) {
if (!std.mem.eql(u8, arg, "-e")) return true; // Build up the command. We don't clean this up because we take
// ownership in our allocator.
var command = std.ArrayList(u8).init(alloc);
errdefer command.deinit();
// Build up the command. We don't clean this up because we take while (iter.next()) |param| {
// ownership in our allocator. try command.appendSlice(param);
var command = std.ArrayList(u8).init(alloc); try command.append(' ');
errdefer command.deinit(); }
while (iter.next()) |param| { if (command.items.len == 0) {
try command.appendSlice(param); try self._errors.add(alloc, .{
try command.append(' '); .message = try std.fmt.allocPrintZ(
} alloc,
"missing command after -e",
.{},
),
});
if (command.items.len == 0) { return false;
try self._errors.add(alloc, .{ }
.message = try std.fmt.allocPrintZ(
alloc,
"missing command after -e",
.{},
),
});
self.command = command.items[0 .. command.items.len - 1];
// Do not continue, we consumed everything.
return false; return false;
} }
self.command = command.items[0 .. command.items.len - 1]; // If we didn't find a special case, continue parsing normally
return true;
// Do not continue, we consumed everything.
return false;
} }
/// Create a shallow copy of this config. This will share all the memory /// Create a shallow copy of this config. This will share all the memory