Skip to content

Commit eb86da3

Browse files
committed
In bash completion scripts, replace max int64 magic number with -1 to accept all subsequent non-flag/non-option/non-option-value tokens as positionals.
Signed-off-by: Ross Goldberg <[email protected]>
1 parent f464bd0 commit eb86da3

File tree

3 files changed

+10
-10
lines changed

3 files changed

+10
-10
lines changed

Sources/ArgumentParser/Completions/BashCompletionsGenerator.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ extension CommandInfoV0 {
126126
fi
127127
128128
# ${word} is neither a flag, nor an option, nor an option value
129-
if [[ "${positional_number}" -lt "${positional_count}" ]]; then
129+
if [[ "${positional_number}" -lt "${positional_count}" || "${positional_count}" -lt 0 ]]; then
130130
# ${word} is a positional
131131
((positional_number++))
132132
unset "unparsed_words[${word_index}]"
@@ -226,7 +226,7 @@ extension CommandInfoV0 {
226226
\(declareTopLevelArray)repeating_options=(\(options.filter(\.isRepeating).flatMap(\.completionWords).joined(separator: " ")))
227227
\(declareTopLevelArray)non_repeating_options=(\(options.filter { !$0.isRepeating }.flatMap(\.completionWords).joined(separator: " ")))
228228
\(offerFlagsOptionsFunctionName) \
229-
\(positionalArguments.contains { $0.isRepeating } ? 9_223_372_036_854_775_807 : positionalArguments.count)
229+
\(positionalArguments.contains { $0.isRepeating } ? -1 : positionalArguments.count)
230230
231231
"""
232232
}

Tests/ArgumentParserExampleTests/Snapshots/testMathBashCompletionScript().bash

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ __math_offer_flags_options() {
100100
fi
101101

102102
# ${word} is neither a flag, nor an option, nor an option value
103-
if [[ "${positional_number}" -lt "${positional_count}" ]]; then
103+
if [[ "${positional_number}" -lt "${positional_count}" || "${positional_count}" -lt 0 ]]; then
104104
# ${word} is a positional
105105
((positional_number++))
106106
unset "unparsed_words[${word_index}]"
@@ -187,15 +187,15 @@ _math_add() {
187187
non_repeating_flags=(--hex-output -x --version -h --help)
188188
repeating_options=()
189189
non_repeating_options=()
190-
__math_offer_flags_options 9223372036854775807
190+
__math_offer_flags_options -1
191191
}
192192

193193
_math_multiply() {
194194
repeating_flags=()
195195
non_repeating_flags=(--hex-output -x --version -h --help)
196196
repeating_options=()
197197
non_repeating_options=()
198-
__math_offer_flags_options 9223372036854775807
198+
__math_offer_flags_options -1
199199
}
200200

201201
_math_stats() {
@@ -226,7 +226,7 @@ _math_stats_average() {
226226
non_repeating_flags=(--version -h --help)
227227
repeating_options=()
228228
non_repeating_options=(--kind)
229-
__math_offer_flags_options 9223372036854775807
229+
__math_offer_flags_options -1
230230

231231
# Offer option value completions
232232
case "${prev}" in
@@ -242,15 +242,15 @@ _math_stats_stdev() {
242242
non_repeating_flags=(--version -h --help)
243243
repeating_options=()
244244
non_repeating_options=()
245-
__math_offer_flags_options 9223372036854775807
245+
__math_offer_flags_options -1
246246
}
247247

248248
_math_stats_quantiles() {
249249
repeating_flags=()
250250
non_repeating_flags=(--version -h --help)
251251
repeating_options=()
252252
non_repeating_options=(--file --directory --shell --custom --custom-deprecated)
253-
__math_offer_flags_options 9223372036854775807
253+
__math_offer_flags_options -1
254254

255255
# Offer option value completions
256256
case "${prev}" in
@@ -298,7 +298,7 @@ _math_help() {
298298
non_repeating_flags=(--version)
299299
repeating_options=()
300300
non_repeating_options=()
301-
__math_offer_flags_options 9223372036854775807
301+
__math_offer_flags_options -1
302302
}
303303

304304
complete -o filenames -F _math math

Tests/ArgumentParserUnitTests/Snapshots/testBase_Bash().bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ __base-test_offer_flags_options() {
100100
fi
101101

102102
# ${word} is neither a flag, nor an option, nor an option value
103-
if [[ "${positional_number}" -lt "${positional_count}" ]]; then
103+
if [[ "${positional_number}" -lt "${positional_count}" || "${positional_count}" -lt 0 ]]; then
104104
# ${word} is a positional
105105
((positional_number++))
106106
unset "unparsed_words[${word_index}]"

0 commit comments

Comments
 (0)