Fix detection of numeric value when parsing short options#3
Fix detection of numeric value when parsing short options#3shadowspawn wants to merge 1 commit intominimistjs:mainfrom
Conversation
|
This change makes the short option parsing work as intended, but changes the parse results and will be a breaking change for some users. (Albeit, as is any change!) |
7564f07 to
eac091b
Compare
|
How likely is it that anyone will have been relying on the incorrect, and untested, results? |
eac091b to
e2dbb25
Compare
|
The potentially broken use case I have in mind is a short option value that for external reasons consistently ends in a number. A user might have discovered that the value could be put straight after the short option. For example: This might be rare since:
|
|
I checked what yargs does, as the most evolved optimist descendent: try-yargs $ node index.js -ABC123
{ _: [], A: true, B: true, C: 123, '$0': 'index.js' }Old minimist: try-minimist $ node index.js -ABC123
{ _: [], flag: false, A: 'BC123' }And on this branch minimist does: $ node index.js -ABC123
{ _: [], flag: false, A: true, B: true, C: 123 } |
|
I agree this is better/more intuitive behavior. It would, however, be quite a breaking change. |
|
Marking as semver-major (copied the label text and colours from qs) If this comes up a lot in issues, or if we decide never to do a major, can reconsider. |
|
This was reported as an issue on the original Minimist repo (comments from 2 users): Parsing multiple short option with a default value
But the behavior I was expecting was: |
|
And a duplicate report on original Minimist repo: Incorrectly parsed values while short param end with number |
Problem
The parsing behaviour changes depending on whether the last character in group is a number, switching between a group of boolean options and an option taking a value. See #2 (comment)
For example:
Solution
Per #2 (comment)
There is a bug in the code detecting whether the remaining characters in the argument are a number. If the argument ends in a number it is treated as a number, even if there are letters before that.
The search
/-?\d+(\.\d*)?(e-?\d+)?$/is not anchored at the start and thinks1b2is a number because it ends in a number. So it treats-a1b2like-a123and assigns the "number" to theaoption.