Skip to content

Commit 9b28aad

Browse files
author
Benjamin
committed
fix: nargs was still aggressively consuming too many arguments
1 parent cf0d9d0 commit 9b28aad

2 files changed

Lines changed: 6 additions & 4 deletions

File tree

index.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ function parse (args, opts) {
303303
// on the nargs option?
304304
function eatNargs (i, key, args) {
305305
var ii
306-
var toEat = checkAllAliases(key, flags.nargs)
306+
const toEat = checkAllAliases(key, flags.nargs)
307307

308308
// nargs will not consume flag arguments, e.g., -abc, --foo,
309309
// and terminates when one is observed.
@@ -315,11 +315,12 @@ function parse (args, opts) {
315315

316316
if (available < toEat) error = Error(__('Not enough arguments following: %s', key))
317317

318-
for (ii = i + 1; ii < (Math.min(available, toEat) + i + 1); ii++) {
318+
const consumed = Math.min(available, toEat)
319+
for (ii = i + 1; ii < (consumed + i + 1); ii++) {
319320
setArg(key, args[ii])
320321
}
321322

322-
return (i + toEat)
323+
return (i + consumed)
323324
}
324325

325326
// if an option is an array, eat all non-hyphenated arguments

test/yargs-parser.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1645,12 +1645,13 @@ describe('yargs-parser', function () {
16451645
})
16461646

16471647
it('should not treat flag arguments as satisfying narg requirements', function () {
1648-
var result = parser.detailed(['--foo', '--bar'], {
1648+
var result = parser.detailed(['--foo', '--bar', '99'], {
16491649
narg: {
16501650
foo: 1
16511651
}
16521652
})
16531653

1654+
result.argv.bar.should.equal(99)
16541655
result.error.message.should.equal('Not enough arguments following: foo')
16551656
})
16561657

0 commit comments

Comments
 (0)