clap/clap_generate
Ed Page a61b60816c fix(gen): Ensure subcommands are post-processed
`App::get_matches` lazily post-processes `App`s and `Arg`s so we don't
do it to subcommands that are never run (downside being people have to
exercise their full app to get debug_asserts).

`clap_generate` was only post-processing the top-level `App` and `Arg`s,
ignoring the sub-commands.  In #2858, we noticed that `--version` was
being left in the completions instead of being removed during the
`_build` step.  We would also have an incorrect `num_vals` and a host of
other problems.

This change adds a `App::_build_all` function for `clap_generate` to use
to eagerly build everything.  By having it there, we make sure
everywhere that needs eager building, gets it (like some tests).

In `clap_generate::utils`, we add a unit test to ensure the subcommand's
`--version` was removed.

For some other tests specifying `.version()`, I added
`AppSettings::PropagateVersion` to make it behave more consistently.
The places I didn't were generally where the version was conditionally
set.

For `clap_generate/tests/generate_completions.rs`, I had to adjust the
`conflicts_with` because the subcommand was inheriting the argument with
it defined *but* the subcommand did not have the argument, tripping up a
debug assert.

Fixes #2860
2021-10-12 15:54:26 -05:00
..
examples feat(generate): 'impl Generator for Shell' 2021-10-11 10:46:44 -05:00
src fix(gen): Ensure subcommands are post-processed 2021-10-12 15:54:26 -05:00
tests fix(gen): Ensure subcommands are post-processed 2021-10-12 15:54:26 -05:00
Cargo.toml fix: Whitespace in our generators **is** important and we need to fix it 2021-10-12 02:08:11 +01:00
LICENSE-APACHE docs: Ensure all crates have license files 2021-10-04 14:45:31 -05:00
LICENSE-MIT docs: Ensure all crates have license files 2021-10-04 14:45:31 -05:00
README.md chore: Minor doc and style changes 2021-10-12 02:08:11 +01:00

clap_generate

Crates.io Crates.io License License

Generates completions (and other things) for clap based CLIs