flag: include args after end-of-options(--) when checking min and max args (#21310)

This commit is contained in:
Turiiya 2024-04-19 20:12:00 +02:00 committed by GitHub
parent 39e550fa33
commit 9fb9443a72
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 11 additions and 9 deletions

View file

@ -607,25 +607,19 @@ pub fn (mut fs FlagParser) finalize() ![]string {
}
}
}
if remaining.len < fs.min_free_args && fs.min_free_args > 0 {
remaining << fs.all_after_dashdash
if fs.min_free_args > remaining.len {
return &ArgsCountError{
want: fs.min_free_args
got: remaining.len
}
}
if remaining.len > fs.max_free_args && fs.max_free_args > 0 {
if fs.max_free_args < remaining.len {
return &ArgsCountError{
want: fs.max_free_args
got: remaining.len
}
}
if remaining.len > 0 && fs.max_free_args == 0 && fs.min_free_args == 0 {
return &ArgsCountError{
want: 0
got: remaining.len
}
}
remaining << fs.all_after_dashdash
return remaining
}

View file

@ -204,6 +204,14 @@ fn test_free_args_could_be_limited() {
assert args[0] == 'a'
assert args[1] == 'b'
assert args[2] == 'c'
mut fp2 := flag.new_flag_parser(['--', 'a'])
fp2.limit_free_args_to_at_least(1)!
args2 := fp2.finalize() or {
assert false
return
}
assert args2[0] == 'a'
}
fn test_error_for_to_few_free_args() {