Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix argument parsing for
volta run
to properly handle flags
Clap's parsing for variable-length argument lists has precedence rules for what happens when a potential vararg overlaps with a known flag value (see https://docs.rs/clap/latest/clap/struct.Arg.html#method.allow_hyphen_values): 1. If we are already in a list of variable args, the args take precedence and any potential flags are ignored (flags are treated as part of the vararg) 2. If we are _not_ already in a list of variable args, then known flags take precedence and are parsed as such, rather than starting the vararg list As a result of this precedence, with `volta run` set up to have `args` be separate from `command`, we could run into parsing issues with commands that have flags that overlap with Volta's. For example: ``` volta run node -h ``` When parsing this, Clap would see `node` as the `command`, and then it would parse `-h` as _Volta's_ `-h` (help) flag and print Volta's help. This is because the variable-length `args` hadn't started yet (we hadn't run into any unknown positional arguments), so Clap treated `-h` as a known flag with higher precedence. This is exactly the opposite of what we actually want for `volta run` Instead, what we want is that everything after the `command` argument should be treated as part of the arguments to the command; regardless of whether the flag overlaps with Volta's flags. To achieve that, we combine `command` and `args` into a _single_ vararg, so that by virtue of having a command in the first place, the vararg has started parsing and Clap will treat any flags as more argument values, rather than as flags.
- Loading branch information