mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-04-20 16:11:14 -03:00
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).
28 lines
600 B
Fish
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
|