Files
fish-shell/tests/checks/line-number.fish
Isaac Oscar Gariano 70dca1e136 Give a more helpful error when a boolean option has an argument.
This fixes an issue very similar to #6483,
For example, fish --login=root used to print this:
    fish: --login=root: unknown option
But `--login` is a valid option to fish.
So the above now prints:
    fish: --login=root: option does not take an argument

This is done by modifying WGetOpter so that it returns a ';' if it encountered
an option with an argument, but the option was not declared as taking an option
(this is only possible with the --long=value or legacy -long=value syntax).
All uses of WGetOpter (except echo, fish_indent, and some tests) are modified to
then print an appropriate error message when ';' is returned.
echo doesn't have any long options, so it will panic if gets a ';'.
fish_indent doesn't print any error messages for invalid options anyway, and I
wasn't sure if this was intentional or not.

Moreover, WGetOpter now always returns a ':' for options that are missing an
argument. And you can no longer prefix a your option spec with a ':' to enable
this (since every use of WGetOpter was doing this anyway, except
wgetopt::test_exchange and tests::wgetopt::test_wgetopt).
2025-08-30 01:55:56 +10:00

28 lines
600 B
Fish

# RUN: %fish %s
#
# These lines left around because we need the line numbers.
# This file in general requires careful editing in the middle, I recommend appending.
function t --on-event linenumber
status line-number
status line-number
status line-number
end
emit linenumber
# CHECK: 6
# CHECK: 7
# CHECK: 8
type --nonexistent-option-so-we-get-a-backtrace
# CHECKERR: type: --nonexistent-option-so-we-get-a-backtrace: unknown option
type --short=cd
# CHECKERR: type: --short=cd: option does not take an argument
function line-number
status line-number
end
line-number
# CHECK: 23