Accept --ignore-extras argument
This commit is contained in:
parent
6119e52888
commit
96832abac6
2 changed files with 32 additions and 7 deletions
26
src/main.zig
26
src/main.zig
|
@ -46,6 +46,7 @@ const Config = struct {
|
|||
file: ?fs.File,
|
||||
line: ?[]const u8 = null,
|
||||
token: ?[]const u8 = null,
|
||||
ignoreExtras: bool,
|
||||
|
||||
pub fn deinit(self: @This()) void {
|
||||
if (self.file) |f| {
|
||||
|
@ -56,17 +57,18 @@ const Config = struct {
|
|||
|
||||
fn parseArgs(allocator: mem.Allocator) !Config {
|
||||
const params = comptime [_]clap.Param(clap.Help) {
|
||||
clap.parseParam("<N> The number of lines to skip") catch unreachable,
|
||||
clap.parseParam("[<FILE>] The file to read or stdin if not given") catch unreachable,
|
||||
clap.parseParam("-l, --line <STR> Skip until N lines matching this") catch unreachable,
|
||||
clap.parseParam("-t, --token <STR> Skip lines until N tokens found") catch unreachable,
|
||||
clap.parseParam("-h, --help Display this help and exit") catch unreachable,
|
||||
clap.parseParam("-v, --version Display the version") catch unreachable,
|
||||
clap.parseParam("<N> The number of lines to skip") catch unreachable,
|
||||
clap.parseParam("[<FILE>] The file to read or stdin if not given") catch unreachable,
|
||||
clap.parseParam("-l, --line <STR> Skip until N lines matching this") catch unreachable,
|
||||
clap.parseParam("-t, --token <STR> Skip lines until N tokens found") catch unreachable,
|
||||
clap.parseParam("-i, --ignore-extras Only count the first token on each line") catch unreachable,
|
||||
clap.parseParam("-h, --help Display this help and exit") catch unreachable,
|
||||
clap.parseParam("-v, --version Display the version") catch unreachable,
|
||||
};
|
||||
var diag = clap.Diagnostic{};
|
||||
var args = clap.parse(clap.Help, ¶ms, .{ .diagnostic = &diag }) catch |err| {
|
||||
diag.report(io.getStdErr().writer(), err) catch {};
|
||||
return error.EarlyExit;
|
||||
return error.BadArgs;
|
||||
};
|
||||
defer args.deinit();
|
||||
|
||||
|
@ -97,6 +99,15 @@ fn parseArgs(allocator: mem.Allocator) !Config {
|
|||
if (args.option("--token")) |match| {
|
||||
token = try allocator.dupe(u8, match);
|
||||
}
|
||||
var ignoreExtras: bool = false;
|
||||
if (args.flag("--ignore-extras")) {
|
||||
if (token) |_| {
|
||||
ignoreExtras = true;
|
||||
} else {
|
||||
try io.getStdErr().writer().print("Error: --ignore-extras requires --token\n", .{});
|
||||
return error.BadArgs;
|
||||
}
|
||||
}
|
||||
|
||||
var n: u32 = 0;
|
||||
var file: ?fs.File = null;
|
||||
|
@ -122,6 +133,7 @@ fn parseArgs(allocator: mem.Allocator) !Config {
|
|||
.file = file,
|
||||
.line = line,
|
||||
.token = token,
|
||||
.ignoreExtras = ignoreExtras,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
13
test.sh
13
test.sh
|
@ -75,6 +75,19 @@ diff --brief test.expect.err test.err
|
|||
rm test.expect test.out
|
||||
rm test.expect.err test.err
|
||||
|
||||
echo "> handle ignore-extra when token is missing"
|
||||
cat<<EOF > test.expect.err
|
||||
Error: --ignore-extras requires --token
|
||||
EOF
|
||||
cat<<EOF > test.expect
|
||||
EOF
|
||||
touch test.out test.err
|
||||
./skip --ignore-extras > test.out 2> test.err
|
||||
diff --brief test.expect test.out
|
||||
diff --brief test.expect.err test.err
|
||||
rm test.expect test.out
|
||||
rm test.expect.err test.err
|
||||
|
||||
echo "> skip lines until 3 tokens seen - ignored extra tokens on same line"
|
||||
cat<<EOF > test.in
|
||||
Lorem ipsum dolor sit amet,
|
||||
|
|
Loading…
Reference in a new issue