Accept --ignore-extras argument
This commit is contained in:
parent
6119e52888
commit
96832abac6
2 changed files with 32 additions and 7 deletions
14
src/main.zig
14
src/main.zig
|
@ -46,6 +46,7 @@ const Config = struct {
|
||||||
file: ?fs.File,
|
file: ?fs.File,
|
||||||
line: ?[]const u8 = null,
|
line: ?[]const u8 = null,
|
||||||
token: ?[]const u8 = null,
|
token: ?[]const u8 = null,
|
||||||
|
ignoreExtras: bool,
|
||||||
|
|
||||||
pub fn deinit(self: @This()) void {
|
pub fn deinit(self: @This()) void {
|
||||||
if (self.file) |f| {
|
if (self.file) |f| {
|
||||||
|
@ -60,13 +61,14 @@ fn parseArgs(allocator: mem.Allocator) !Config {
|
||||||
clap.parseParam("[<FILE>] The file to read or stdin if not given") 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("-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("-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("-h, --help Display this help and exit") catch unreachable,
|
||||||
clap.parseParam("-v, --version Display the version") catch unreachable,
|
clap.parseParam("-v, --version Display the version") catch unreachable,
|
||||||
};
|
};
|
||||||
var diag = clap.Diagnostic{};
|
var diag = clap.Diagnostic{};
|
||||||
var args = clap.parse(clap.Help, ¶ms, .{ .diagnostic = &diag }) catch |err| {
|
var args = clap.parse(clap.Help, ¶ms, .{ .diagnostic = &diag }) catch |err| {
|
||||||
diag.report(io.getStdErr().writer(), err) catch {};
|
diag.report(io.getStdErr().writer(), err) catch {};
|
||||||
return error.EarlyExit;
|
return error.BadArgs;
|
||||||
};
|
};
|
||||||
defer args.deinit();
|
defer args.deinit();
|
||||||
|
|
||||||
|
@ -97,6 +99,15 @@ fn parseArgs(allocator: mem.Allocator) !Config {
|
||||||
if (args.option("--token")) |match| {
|
if (args.option("--token")) |match| {
|
||||||
token = try allocator.dupe(u8, 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 n: u32 = 0;
|
||||||
var file: ?fs.File = null;
|
var file: ?fs.File = null;
|
||||||
|
@ -122,6 +133,7 @@ fn parseArgs(allocator: mem.Allocator) !Config {
|
||||||
.file = file,
|
.file = file,
|
||||||
.line = line,
|
.line = line,
|
||||||
.token = token,
|
.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 test.out
|
||||||
rm test.expect.err test.err
|
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"
|
echo "> skip lines until 3 tokens seen - ignored extra tokens on same line"
|
||||||
cat<<EOF > test.in
|
cat<<EOF > test.in
|
||||||
Lorem ipsum dolor sit amet,
|
Lorem ipsum dolor sit amet,
|
||||||
|
|
Loading…
Reference in a new issue