diff --git a/src/builtin.cpp b/src/builtin.cpp index d27f4f8af..0a0057eb2 100644 --- a/src/builtin.cpp +++ b/src/builtin.cpp @@ -179,7 +179,7 @@ void builtin_unknown_option(parser_t &parser, io_streams_t &streams, const wchar /// Perform error reporting for encounter with missing argument. void builtin_missing_argument(parser_t &parser, io_streams_t &streams, const wchar_t *cmd, const wchar_t *opt) { - streams.err.append_format(BUILTIN_ERR_MISSING, cmd, opt); + streams.err.append_format(BUILTIN_ERR_MISSING, cmd, opt + std::wcslen(opt) - 1); builtin_print_error_trailer(parser, streams.err, cmd); } diff --git a/src/builtin_argparse.cpp b/src/builtin_argparse.cpp index 1858242fa..d93c0a090 100644 --- a/src/builtin_argparse.cpp +++ b/src/builtin_argparse.cpp @@ -550,7 +550,8 @@ static int argparse_parse_flags(parser_t &parser, argparse_cmd_opts_t &opts, wgetopter_t w; while ((opt = w.wgetopt_long(argc, argv, short_options, long_options, &long_idx)) != -1) { if (opt == ':') { - streams.err.append_format(BUILTIN_ERR_MISSING, cmd, argv[w.woptind - 1]); + const wchar_t *arg = argv[w.woptind - 1]; + streams.err.append_format(BUILTIN_ERR_MISSING, cmd, arg + std::wcslen(arg) - 1); return STATUS_INVALID_ARGS; } else if (opt == '?') { // It's not a recognized flag. See if it's an implicit int flag. diff --git a/src/builtin_string.cpp b/src/builtin_string.cpp index ea73085a6..ca592e984 100644 --- a/src/builtin_string.cpp +++ b/src/builtin_string.cpp @@ -458,7 +458,8 @@ static int parse_opts(options_t *opts, int *optind, int n_req_args, int argc, wc int retval = fn->second(argv, parser, streams, w, opts); if (retval != STATUS_CMD_OK) return retval; } else if (opt == ':') { - string_error(streams, BUILTIN_ERR_MISSING, cmd, argv[w.woptind - 1]); + const wchar_t *arg = argv[w.woptind - 1]; + string_error(streams, BUILTIN_ERR_MISSING, cmd, arg + std::wcslen(arg) - 1); return STATUS_INVALID_ARGS; } else if (opt == '?') { string_unknown_option(parser, streams, cmd, argv[w.woptind - 1]); diff --git a/tests/checks/argparse.fish b/tests/checks/argparse.fish index ad628a51c..e2f3f3a21 100644 --- a/tests/checks/argparse.fish +++ b/tests/checks/argparse.fish @@ -305,5 +305,5 @@ begin end # #6483 - error messages for missing arguments -argparse -n foo r/required= -- foo -r -# CHECKERR: foo: Expected argument for option -r +argparse -n foo q r/required= -- foo -qr +# CHECKERR: foo: Expected argument for option r diff --git a/tests/checks/string.fish b/tests/checks/string.fish index dc3eb6e84..11464baa9 100644 --- a/tests/checks/string.fish +++ b/tests/checks/string.fish @@ -330,7 +330,7 @@ echo "stdin" | string repeat -n1 "and arg"; and echo "exit 0" # CHECKERR: string repeat: Too many arguments string repeat -n; and echo "exit 0" -# CHECKERR: string repeat: Expected argument for option -n +# CHECKERR: string repeat: Expected argument for option n # FIXME: Also triggers usage # string repeat -l fakearg