mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-30 19:41:15 -03:00
argparse: Make short flag names optional (#7585)
It was always a bit ridiculous that argparse required `X-longflag` if that "X" short flag was never actually used anywhere. Since the short letter is for getopt's benefit, we can hack around this with our old friend: Unicode Private Use Areas. We have a counter, starting at 0xE000 and going to 0xF8FF, that counts up for all options that don't have a short flag and provides one. This gives us up to 6400 long-only options. 6.4K should be enough for everybody.
This commit is contained in:
@@ -350,6 +350,54 @@ begin
|
||||
# CHECK: saved_status 57
|
||||
end
|
||||
|
||||
# long-only flags
|
||||
begin
|
||||
argparse installed= foo -- --installed=no --foo
|
||||
set -l
|
||||
# CHECK: _flag_a 'alpha' 'aaaa'
|
||||
# CHECK: _flag_b -b
|
||||
# CHECK: _flag_break -b
|
||||
# CHECK: _flag_foo --foo
|
||||
# CHECK: _flag_installed no
|
||||
# CHECK: _flag_m 1
|
||||
# CHECK: _flag_max 1
|
||||
# CHECK: argv
|
||||
# CHECK: saved_status 57
|
||||
end
|
||||
|
||||
begin
|
||||
argparse installed='!_validate_int --max 12' foo -- --installed=5 --foo
|
||||
set -l
|
||||
# CHECK: _flag_a 'alpha' 'aaaa'
|
||||
# CHECK: _flag_b -b
|
||||
# CHECK: _flag_break -b
|
||||
# CHECK: _flag_foo --foo
|
||||
# CHECK: _flag_installed 5
|
||||
# CHECK: _flag_m 1
|
||||
# CHECK: _flag_max 1
|
||||
# CHECK: argv
|
||||
# CHECK: saved_status 57
|
||||
end
|
||||
|
||||
begin
|
||||
argparse '#num' installed= -- --installed=5 -5
|
||||
set -l
|
||||
# CHECK: _flag_a 'alpha' 'aaaa'
|
||||
# CHECK: _flag_b -b
|
||||
# CHECK: _flag_break -b
|
||||
# CHECK: _flag_installed 5
|
||||
# CHECK: _flag_m 1
|
||||
# CHECK: _flag_max 1
|
||||
# CHECK: _flag_num 5
|
||||
# CHECK: argv
|
||||
# CHECK: saved_status 57
|
||||
end
|
||||
|
||||
begin
|
||||
argparse installed='!_validate_int --max 12' foo -- --foo --installed=error --foo
|
||||
# CHECKERR: argparse: Value 'error' for flag 'installed' is not an integer
|
||||
end
|
||||
|
||||
# #6483 - error messages for missing arguments
|
||||
argparse -n foo q r/required= -- foo -qr
|
||||
# CHECKERR: foo: Expected argument for option r
|
||||
@@ -440,3 +488,12 @@ function wrongargparse
|
||||
argparse a-b
|
||||
argparse
|
||||
end
|
||||
|
||||
begin
|
||||
argparse ''
|
||||
#CHECKERR: argparse: An option spec must have at least a short or a long flag
|
||||
#CHECKERR: checks/argparse.fish (line {{\d+}}):
|
||||
#CHECKERR: argparse ''
|
||||
#CHECKERR: ^
|
||||
#CHECKERR: (Type 'help argparse' for related documentation)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user