⚡ finish parse in argparse.nas
This commit is contained in:
parent
8e0d1e18e1
commit
ca7666c220
|
@ -1,7 +1,6 @@
|
||||||
|
|
||||||
var _arg = globals.arg;
|
|
||||||
|
|
||||||
var new = func(description) {
|
var new = func(description) {
|
||||||
|
var _arg = globals.arg;
|
||||||
var parser = {
|
var parser = {
|
||||||
description: description,
|
description: description,
|
||||||
subparser: [],
|
subparser: [],
|
||||||
|
@ -13,28 +12,70 @@ var new = func(description) {
|
||||||
return _add_subparser(parser, name, help);
|
return _add_subparser(parser, name, help);
|
||||||
},
|
},
|
||||||
parse: func() {
|
parse: func() {
|
||||||
return _parse(parser);
|
return _parse(parser, _arg);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
parser.add_command("--help", "-h", "Get help info and exit");
|
||||||
|
return parser;
|
||||||
|
}
|
||||||
|
|
||||||
|
var _new_sub_parser = func(description) {
|
||||||
|
var parser = {
|
||||||
|
description: description,
|
||||||
|
subparser: [],
|
||||||
|
command_list: [],
|
||||||
|
add_command: func(long, short, help) {
|
||||||
|
return _add_command(parser, long, short, help);
|
||||||
|
},
|
||||||
|
add_subparser: func(name, help) {
|
||||||
|
return _add_subparser(parser, name, help);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
parser.add_command("--help", "-h", "Get help info and exit");
|
||||||
return parser;
|
return parser;
|
||||||
}
|
}
|
||||||
|
|
||||||
var _help = func(parser) {
|
var _help = func(parser) {
|
||||||
println(parser.description);
|
println(parser.description, "\n");
|
||||||
println("Subcommand:");
|
if (size(parser.subparser)>0) {
|
||||||
foreach(var cmd; parser.subparser) {
|
println("Subcommand:");
|
||||||
println(cmd.name, "\t", cmd.parser.description);
|
foreach(var cmd; parser.subparser) {
|
||||||
|
println(" ", cmd.name, "\t", cmd.parser.description);
|
||||||
|
}
|
||||||
|
println();
|
||||||
}
|
}
|
||||||
println("Options:");
|
if (size(parser.command_list)>0) {
|
||||||
foreach(var cmd; parser.command_list) {
|
println("Options:");
|
||||||
println(cmd.full_name, " ", cmd.short_name, "\t", cmd.help);
|
foreach(var cmd; parser.command_list) {
|
||||||
|
println(" ", cmd.full_name, " ", cmd.short_name, "\t", cmd.help);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _parse = func(parser) {
|
var _parse = func(parser, args) {
|
||||||
if (size(_arg)==0) {
|
if (size(args)==0) {
|
||||||
_help(parser);
|
_help(parser);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
var first_arg = args[0];
|
||||||
|
foreach(var subparser; parser.subparser) {
|
||||||
|
if (subparser.name==first_arg) {
|
||||||
|
return _parse(subparser.parser, size(args)>1? args[1:]:[]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach(var cmd; parser.command_list) {
|
||||||
|
if (first_arg=="--help" or first_arg=="-h") {
|
||||||
|
_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");
|
||||||
|
_help(parser);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var _add_command = func(parser, long, short, help) {
|
var _add_command = func(parser, long, short, help) {
|
||||||
|
@ -49,7 +90,8 @@ var _add_command = func(parser, long, short, help) {
|
||||||
var _add_subparser = func(parser, name, help) {
|
var _add_subparser = func(parser, name, help) {
|
||||||
var new_subparser = {
|
var new_subparser = {
|
||||||
name: name,
|
name: name,
|
||||||
parser: new(help)
|
parser: _new_sub_parser(help)
|
||||||
};
|
};
|
||||||
append(parser.subparser, new_subparser);
|
append(parser.subparser, new_subparser);
|
||||||
|
return new_subparser.parser;
|
||||||
}
|
}
|
|
@ -1,11 +1,7 @@
|
||||||
# use module.libjson;
|
|
||||||
|
|
||||||
# libjson.stringify(math.tan);
|
|
||||||
|
|
||||||
# println(libjson.get_error());
|
|
||||||
use std.argparse;
|
use std.argparse;
|
||||||
|
|
||||||
var args = argparse.new("test cli");
|
var args = argparse.new("test cli");
|
||||||
args.add_command("--what", "-w", "what-what");
|
args.add_command("--what", "-w", "what-what");
|
||||||
args.add_subparser("what", "what-what");
|
var subparser0 = args.add_subparser("subcommand0", "what-what");
|
||||||
|
subparser0.add_command("--sub-what", "-sw", "sub-what-what");
|
||||||
args.parse();
|
args.parse();
|
||||||
|
|
Loading…
Reference in New Issue