cmd: improve command usage strings

the command usage strings now use the actual argument values provided by the user, in particular for the names of relevant commands
This commit is contained in:
2025-08-09 19:36:46 +01:00
parent fae8ffe4f8
commit bcbd85372e
4 changed files with 52 additions and 25 deletions

View File

@@ -229,6 +229,8 @@ static b_status parse_arg(struct argv_parser *parser)
= b_command_get_subcommand_with_name(parser->cmd, value);
if (subcmd) {
move_to_subcommand(parser, subcmd);
parser->arglist->list_argv_last_command
= parser->index + 1;
advance(parser);
continue;
}
@@ -309,13 +311,15 @@ static b_status parse_short_opt(struct argv_parser *parser)
if (subcmd) {
move_to_subcommand(parser, subcmd);
parser->arglist->list_argv_last_command
= parser->index + 1;
flags++;
continue;
}
if (!opt) {
struct b_string *usage = z__b_command_default_usage_string(
parser->cmd, NULL);
parser->cmd, NULL, parser->arglist);
b_err("unrecognised argument '" F_YELLOW "-%c" F_RESET
"'\n\n",
flag, b_string_ptr(usage));
@@ -452,8 +456,8 @@ static b_status parse_long_opt(struct argv_parser *parser)
}
if (!opt && !subcmd) {
struct b_string *usage
= z__b_command_default_usage_string(parser->cmd, NULL);
struct b_string *usage = z__b_command_default_usage_string(
parser->cmd, NULL, parser->arglist);
b_err("unrecognised argument '" F_YELLOW "--%s" F_RESET
"'\n\nusage: %s\n\nfor more information, use '" F_YELLOW
"--help" F_RESET "'\n",
@@ -466,7 +470,8 @@ static b_status parse_long_opt(struct argv_parser *parser)
advance(parser);
if (subcmd) {
parser->cmd = subcmd;
move_to_subcommand(parser, subcmd);
parser->arglist->list_argv_last_command = parser->index + 1;
return B_SUCCESS;
}
@@ -591,8 +596,11 @@ static bool should_show_help(struct b_command *cmd, struct b_arglist *args)
b_status b_arglist_parse(
struct b_arglist *args, struct b_command **cmd, int argc, const char **argv)
{
struct argv_parser parser
= {.arglist = args, .argc = argc - 1, .argv = argv + 1};
struct argv_parser parser = {
.arglist = args,
.argc = argc - 1,
.argv = argv + 1,
};
move_to_subcommand(&parser, *cmd);