Skip to content

Commit ef2f239

Browse files
committed
afind: migrate to clap
1 parent 071531b commit ef2f239

File tree

1 file changed

+32
-34
lines changed

1 file changed

+32
-34
lines changed

src/find_main.zig

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const std = @import("std");
22
const sqlite = @import("sqlite");
33
const manage_main = @import("main.zig");
44
const libpcre = @import("libpcre");
5+
const clap = @import("clap");
56
const Context = manage_main.Context;
67
const ID = manage_main.ID;
78
const logger = std.log.scoped(.afind);
@@ -57,8 +58,25 @@ pub fn main() anyerror!void {
5758
defer _ = gpa.deinit();
5859
var allocator = gpa.allocator();
5960

60-
var args_it = std.process.args();
61-
_ = args_it.skip();
61+
const params = comptime clap.parseParamsComptime(
62+
\\-h, --help display this help and exit.
63+
\\-V, --version print version and exit.
64+
\\-v, --verbose enable debug logs.
65+
\\-L, --link creates a temporary folder with symlinks to all results
66+
\\--v1 use v1 cli api (for scripts)
67+
\\<str>... list of tags to search on. returned results are an intersection of all given tags' results
68+
);
69+
70+
var diag = clap.Diagnostic{};
71+
var res = clap.parse(clap.Help, &params, clap.parsers.default, .{
72+
.diagnostic = &diag,
73+
.allocator = allocator,
74+
}) catch |err| {
75+
// Report useful error and exit.
76+
diag.report(std.io.getStdErr().writer(), err) catch {};
77+
return err;
78+
};
79+
defer res.deinit();
6280

6381
const StringList = std.ArrayList([]const u8);
6482
const Args = struct {
@@ -67,44 +85,24 @@ pub fn main() anyerror!void {
6785
link: bool = false,
6886
cli_v1: bool = true,
6987
query: StringList,
70-
pub fn deinit(self: *@This()) void {
71-
self.query.deinit();
72-
}
7388
};
7489

7590
var given_args = Args{ .query = StringList.init(allocator) };
76-
defer given_args.deinit();
77-
var arg_state: enum { None, MoreTags } = .None;
78-
79-
while (args_it.next()) |arg| {
80-
switch (arg_state) {
81-
.None => {},
82-
.MoreTags => {
83-
try given_args.query.append(arg);
84-
// once in MoreTags state, all next arguments are part
85-
// of the query.
86-
continue;
87-
},
88-
}
89-
if (std.mem.eql(u8, arg, "-h")) {
90-
given_args.help = true;
91-
} else if (std.mem.eql(u8, arg, "-V")) {
92-
given_args.version = true;
93-
} else if (std.mem.eql(u8, arg, "-v")) {
94-
current_log_level = .debug;
95-
} else if (std.mem.eql(u8, arg, "-L") or std.mem.eql(u8, arg, "--link")) {
96-
given_args.link = true;
97-
} else if (std.mem.eql(u8, arg, "--v1")) {
98-
given_args.cli_v1 = true; // doesn't do anything yet
99-
} else {
100-
arg_state = .MoreTags;
101-
try given_args.query.append(arg);
102-
}
91+
defer given_args.query.deinit();
92+
93+
given_args.help = res.args.help != 0;
94+
given_args.version = res.args.version != 0;
95+
if (res.args.verbose != 0)
96+
current_log_level = .debug;
97+
given_args.cli_v1 = res.args.v1 != 0;
98+
given_args.link = res.args.link != 0;
99+
100+
for (res.positionals[0]) |arg| {
101+
try given_args.query.append(arg);
103102
}
104103

105104
if (given_args.help) {
106-
std.debug.print(HELPTEXT, .{});
107-
return;
105+
return clap.help(std.io.getStdErr().writer(), clap.Help, &params, .{});
108106
} else if (given_args.version) {
109107
std.debug.print("ainclude {s}\n", .{VERSION});
110108
return;

0 commit comments

Comments
 (0)