@@ -2,6 +2,7 @@ const std = @import("std");
22const sqlite = @import ("sqlite" );
33const manage_main = @import ("main.zig" );
44const libpcre = @import ("libpcre" );
5+ const clap = @import ("clap" );
56const Context = manage_main .Context ;
67const ID = manage_main .ID ;
78const 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