From 734aec1bc25d50fa300166be8dd62794782b1cab Mon Sep 17 00:00:00 2001 From: ValKmjolnir Date: Sun, 10 Dec 2023 00:18:46 +0800 Subject: [PATCH] :sparkles: finish parse trigger command --- std/argparse.nas | 38 ++++++++++++++++++++++++++------------ test/argparse_test.nas | 15 ++++++++++----- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/std/argparse.nas b/std/argparse.nas index 43b5b94..6b9febe 100644 --- a/std/argparse.nas +++ b/std/argparse.nas @@ -11,8 +11,10 @@ var new = func(description) { add_subparser: func(name, help) { return _add_subparser(parser, name, help); }, - parse: func() { - return _parse(parser, _arg); + parse_args: func() { + var result_hash = {}; + _parse(parser, _arg, result_hash); + return result_hash; } }; parser.add_command("--help", "-h", "Get help info and exit"); @@ -52,30 +54,42 @@ var _help = func(parser) { } } -var _parse = func(parser, args) { +var _parse = func(parser, args, result_hash) { if (size(args)==0) { + println("Require more command, use \"--help\" to get help.\n"); _help(parser); - return; + exit(0); } var first_arg = args[0]; foreach(var subparser; parser.subparser) { if (subparser.name==first_arg) { - return _parse(subparser.parser, size(args)>1? args[1:]:[]); + result_hash[subparser.name] = true; + _parse(subparser.parser, size(args)>1? args[1:]:[], result_hash); + return; } } - foreach(var cmd; parser.command_list) { - if (first_arg=="--help" or first_arg=="-h") { + foreach(var this_arg; args) { + var find_command_flag = false; + foreach(var cmd; parser.command_list) { + if (this_arg=="--help" or this_arg=="-h") { + _help(parser); + exit(0); + } + if (this_arg==cmd.full_name or this_arg==cmd.short_name) { + result_hash[cmd.full_name] = true; + find_command_flag = true; + } + } + if (!find_command_flag) { + println("Invalid command `", this_arg, "`.\n"); _help(parser); exit(0); } - if (first_arg==cmd.full_name or first_arg==cmd.short_name) { - return "[WIP]"; - } } # unreachable - println("Invalid command `", first_arg, "`\n"); + println("Invalid command `", first_arg, "`.\n"); _help(parser); - return; + exit(0); } var _add_command = func(parser, long, short, help) { diff --git a/test/argparse_test.nas b/test/argparse_test.nas index 320c32d..c42c928 100644 --- a/test/argparse_test.nas +++ b/test/argparse_test.nas @@ -1,7 +1,12 @@ use std.argparse; -var args = argparse.new("test cli"); -args.add_command("--what", "-w", "what-what"); -var subparser0 = args.add_subparser("subcommand0", "what-what"); -subparser0.add_command("--sub-what", "-sw", "sub-what-what"); -args.parse(); +var args = argparse.new("Nasal ArgParse Test CLI"); +args.add_command("--what", "-wa", "what-command"); +args.add_command("--who", "-wo", "who-command"); +args.add_command("--where", "-we", "where-command"); +var subparser0 = args.add_subparser("subcommand0", "Nasal ArgParse Test CLI Sub-command 0"); +subparser0.add_command("--sub0-what", "-s0w", "sub0-what-command"); +var subparser1 = args.add_subparser("subcommand1", "Nasal ArgParse Test CLI Sub-command 1"); +subparser1.add_command("--sub1-what", "-s1w", "sub1-what-command"); +var result = args.parse_args(); +println(result);