Commit graph

245 commits

Author SHA1 Message Date
Sean Allred
05cd057978
perf: Avoid retrieving possible_values unless used
In some sophisticated situations, these may be expensive to calculate.
One example might be a '--branch' option accepting any single Git
branch that exists on the remote -- in such a case, the remote would
need to be queried for all possible_values. The cost is ultimately
unavoidable at runtime since this validation has to happen eventually,
but there's no need to pay it when generating help text if
`is_hide_possible_values_set`.

To keep '-h' fast, avoid collecting `possible_values` during '-h'
unless we're actually going to use the values in display.

This optimization is repeated for the manpage renderer.

This is trivially based on the short-circuiting logic at [1], which at
least supports the idea that actually consuming the iterator is not
generally-guaranteed behavior when `hide_possible_values` is set.

Note on the 'expensive' mod: This keeps all the possible_values tests
in one file but allows the entire set of tests to be controlled by the
'strings' feature (which is required to be able to use String rather
than str for each possible value).

[1]: clap_builder/src/builder/command.rs:long_help_exists_
2023-12-28 10:06:35 -06:00
Ed Page
d092896d61 chore: Release 2023-12-04 12:17:32 -06:00
Ed Page
37917be0b7 feat: Add Command::mut_group
Fixes #5038
2023-12-04 12:03:05 -06:00
Ed Page
21b671f689 chore: Release 2023-11-27 11:57:26 -06:00
Ed Page
b13f6d9862 fix(help): Hide 'help' if only flattened subcommand 2023-11-27 10:49:21 -06:00
Ed Page
a9322cabf3 fix(help): Hide subcommands in flattened usage 2023-11-27 10:43:16 -06:00
Ed Page
22130e3057 fix(help): Use right about when flattening
Fixes #5226
2023-11-27 09:28:30 -06:00
Kelly Thomas Kline
7568d5fa67
Update command.rs
Correct wording.
2023-11-16 21:06:03 -08:00
Ed Page
3aeea916e8 chore: Release 2023-11-10 16:24:46 -06:00
Ed Page
9c0f7a7253 fix(help): Recurse help flattening 2023-11-09 15:34:05 -06:00
Ed Page
4bef91ca3c refactor(help): Pull out flat subcommands 2023-11-09 15:34:03 -06:00
Ed Page
c9a7ef06e1 fix(help): Gloss over globals with flatten
When using globals, people tend to make all of the top-level arguments
global and cascading them through would just bloat the output.
2023-11-09 15:33:18 -06:00
Ed Page
9e5f93d43f fix(help): Be consistent in long/short help 2023-11-09 15:33:18 -06:00
Ed Page
66d2bcbdd4 feat(help): Allow flattening help 2023-11-09 15:32:57 -06:00
Ed Page
caf5cdcfa0 feat(help): Allow flattening usage 2023-11-09 13:31:22 -06:00
Ed Page
a1fd922bda feat(help): Allow controlling flattening 2023-11-09 13:31:11 -06:00
Ed Page
2142b136b8 refactor: Pull out usage name fallback 2023-11-09 13:27:59 -06:00
Ed Page
4b60cefbf1 refactor: Pull out bin name fallback 2023-11-09 13:26:20 -06:00
Ed Page
c1c2e95ab6 refactor(help): Pull out subcommand usage logic 2023-11-09 12:52:08 -06:00
Ed Page
d9685bcc71 refactor(help): Bypass outer usage layer 2023-11-09 12:52:08 -06:00
Ed Page
25e3a87d3c refactor(help): Consolidate arg line usage generation 2023-11-09 12:14:25 -06:00
Ed Page
83981a7f7b refactor: Pull out arg usage line 2023-11-09 12:08:24 -06:00
Ed Page
0c668c3915 refactor(help): Pull out bin name logic 2023-11-09 12:03:35 -06:00
Ed Page
7472aba6ce refactor(help): Clarify usage condition 2023-11-09 12:00:52 -06:00
Ed Page
676e934a61 refactor(help): More directly write args 2023-11-09 11:57:15 -06:00
Ed Page
acdd2c33f0 refactor(help): Make usage argument order consistent 2023-11-09 11:50:46 -06:00
Ed Page
da98eb1a05 refactor(help): Pull out top-level usage logic 2023-11-08 11:49:07 -06:00
Ed Page
f50800f763 refactor(help): Only trim the end on usage 2023-11-08 11:42:54 -06:00
Ed Page
f04f04111b refactor(help): Switch usage creation to writing 2023-11-08 11:25:43 -06:00
Ed Page
6f7174cc7c refactor(help): Pull out usage separator 2023-11-08 11:10:55 -06:00
Ed Page
28425e484f style(docs): Resolve warnings 2023-11-07 13:44:41 -06:00
Ed Page
9bfa5a338c chore: Release 2023-10-24 13:25:07 -05:00
Ed Page
38b5a2f956 chore: Release 2023-10-24 11:45:21 -05:00
Alex Crichton
9a9aabc178 refactor: Reduce code size of testing tokens if they're a number
This commit is a tiny win in compiled code size of a final binary
including `clap` which shaves off 19k of compiled code locally.
Previously tokens were checked if they were a number by using
`.parse::<f64>().is_ok()`, but parsing floats is relatively heavyweight
in terms of code size. This replaces the check with a more naive "does
this string have lots of ascii digits" check where the compiled size of
this check should be much smaller.
2023-10-24 09:17:45 -07:00
Kevin Reid
71c1e59334 docs: Fix doc link to Arg::trailing_var_arg 2023-10-14 18:11:33 -07:00
Ed Page
dfebb54423 style: Make clippy happy 2023-10-12 08:32:59 -05:00
Josh Triplett
416b1a8da7 fix: Remove unused dev-dependencies
These dependencies are used elsewhere in clap, but not in these crates.
`cargo test` and `cargo check --examples` both still pass with these
dependencies removed.
2023-10-10 20:11:33 +08:00
Ed Page
29f22c193c
Merge pull request #5160 from epage/docs
docs: Provide custom version/help flag examples
2023-10-04 17:01:16 -05:00
Ed Page
da7ebca04e docs: Provide custom help flag example 2023-10-04 16:25:31 -05:00
Ed Page
e74864f88a docs: Provide custom version flag example 2023-10-04 16:22:46 -05:00
renovate[bot]
4054a0c1a5
chore(deps): update compatible (dev) (#5151)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-01 01:52:25 +00:00
Ed Page
39f5e807af chore: Release 2023-09-28 14:36:28 -05:00
Ed Page
485b957c4b chore: Upgrade anstream 2023-09-28 14:13:54 -05:00
Ed Page
c298f6a52c chore: Release 2023-09-25 15:59:01 -05:00
Ed Page
3ac44040ef
Merge pull request #5025 from SUPERCILEX/resolve-alias-conflicts
fix: Resolve conflicting name inference if from aliases
2023-09-25 15:56:28 -05:00
Alex Saveau
a76789eb8b
fix: Make long subcommand flag inference consistent
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
2023-09-25 13:28:27 -07:00
Alex Saveau
c2b8ec3bd3
fix: Resolve conflicting name inference if from aliases
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
2023-09-25 13:18:54 -07:00
Ed Page
221177b9cb fix(assert): Call out the action in positional assert
Brought up in #5135
2023-09-25 10:18:37 -05:00
Ed Page
c344edf8b9 docs: Clarify most asserts are for debug builds 2023-09-19 12:38:21 -05:00
Ed Page
e6e539660f chore: Release 2023-09-18 09:28:47 -06:00
Colin Walters
84f99ff979 chore(builder): Bump terminal_size to 0.3
For some reason, terminal_size bumped semver recently; they
also bumped the rustix version to 0.38.

I'd like to reduce the number of copies of OS integration
crates (rustix and nix) in my dependency chain.  Let's bump
to the new version so I can aim to drop rustix 0.37.
2023-09-18 10:31:19 -04:00
renovate[bot]
dc63cba772
chore(deps): update compatible (dev) (#5108)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-01 01:47:45 +00:00
Ed Page
3cd571e654 chore: Release 2023-08-31 13:19:11 -05:00
Ed Page
7a4f7d3f2c
Merge pull request #5106 from epage/once
perf: Drop a dep for faster builds
2023-08-31 13:18:15 -05:00
Ed Page
087224a486 perf: Drop a dep for faster builds
`OnceLock` became available as of 1.70 which is older than our new MSRV.
We can easily get away without `Lazy` variants.
2023-08-31 12:54:45 -05:00
Joe Chen
4012b195fd fix(builder): Update documentation comments 2023-08-31 13:22:35 +08:00
Ed Page
7126f78421 chore: Release 2023-08-28 11:45:19 -05:00
Ed Page
eb53db89f8 feat(help): Stabilize styling support
Fixes #3234
2023-08-28 09:49:48 -05:00
Ed Page
2e49645418 chore: Release 2023-08-24 11:08:02 -05:00
Ed Page
0b196a165c perf(builder): Speed up builds by dropping is-terminal 2023-08-24 10:19:28 -05:00
Ed Page
88cf306216 chore: Release 2023-08-23 09:21:22 -05:00
Ed Page
bf3f25ebb2 fix(help): Ensure padding isn't stripped
Fixes #5083
2023-08-22 16:02:33 -05:00
Ed Page
b9df80c2ce chore: Release 2023-08-18 16:07:31 -05:00
Ed Page
56135f3ff3 fix(builder): UnknownValueParser shouldn't error on flag absense
Fixes #5079
2023-08-18 14:29:37 -05:00
Ed Page
6720240577 feat(parser): Report source to value parsers 2023-08-18 14:28:15 -05:00
Ed Page
df337de701 chore: Release 2023-08-17 08:59:45 -05:00
Ed Page
9f65eb0c9a refactor(error): Give caller control over suggestion 2023-08-16 14:54:45 -05:00
Ed Page
8413c155d2 feat(builder): Allow injecting known unknowns
Fixes #4706
2023-08-16 14:50:08 -05:00
Ed Page
ee1388c0a3 chore: Release 2023-08-07 20:36:44 -05:00
Ed Page
3156e1a35c
Merge pull request #5066 from 9999years/export-trymapvalueparser
feat: Allow referencing `TypedValueParser` in`ValueParserFactory` associated type
2023-08-07 20:35:49 -05:00
Ed Page
b96cbafcbe chore: Release 2023-08-07 20:33:13 -05:00
Rebecca Turner
c86172e891
feat: Export builder::TryMapValueParser
Partial fix for #5065, allows using TypedValueParser::try_map to
implement a ValueParserFactory.
2023-08-03 15:53:38 -07:00
renovate[bot]
6cd2706bf4
chore(deps): update compatible (dev) (#5059)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-01 01:20:36 +00:00
Josh Triplett
9c090262cd feat: Command::mut_args to modify all arguments
Convenient when you want to modify most or all arguments, without having
to call `mut_arg` for each one and name them all.
2023-07-28 21:16:29 -07:00
Ed Page
ae5549d61f chore: Release 2023-07-21 16:56:00 -05:00
Ed Page
8bee728034 fix(parser): Value terminator has higher precedence than later multiple values
This is one of several bugs found when looking at #4960.
2023-07-21 16:41:08 -05:00
Ed Page
9856d67541 chore: Release 2023-07-21 14:44:34 -05:00
Ed Page
6590a855ee fix(parser): Don't suggest -- as often
See #2766
2023-07-21 14:27:15 -05:00
Ed Page
d824b1f0fd chore: Release 2023-07-19 11:05:53 -05:00
Ed Page
8b536e2719 fix(help): Wrap long possible values correctly
We weren't taking the name into account when determining the wrap width.

Fixes #5022
2023-07-19 10:42:09 -05:00
Ed Page
95d411d151 chore: Release 2023-07-18 15:01:21 -05:00
Ed Page
4caa536ca4 fix(assert): Allow stateful value parsers
We'll need to re-evaluate how to solve #3202.

Fixes #4643
2023-07-18 14:11:56 -05:00
Ed Page
51abbe7ebf chore: Release 2023-07-17 20:12:05 -05:00
Ed Page
82f17a40c0 docs(builder): Provide styling examples 2023-07-17 17:10:33 -05:00
Ed Page
e31768bb55 fix(builder): Re-export anstyle for easy access 2023-07-17 17:10:13 -05:00
Ed Page
98f62d1939 chore: Release 2023-07-17 10:55:26 -05:00
Ed Page
36afe99bfa fix(help): Skip [OPTIONS] if help/version action
Our code for detecting when to skip this in the usage was never updated
for actions.
2023-07-17 10:40:42 -05:00
Ed Page
22b545b98b feat(help): Explicit control over short/long help
Fixes #4687
2023-07-17 10:37:26 -05:00
Ed Page
c2191674b0 chore: Release 2023-07-17 10:26:48 -05:00
Ed Page
bc000aa4b0 fix(help): Defaulting max_term_width instead of max_term_width
Fixes #4295
2023-07-17 09:40:49 -05:00
Ed Page
d741e9519c docs(builder): Correct max_term_width docs 2023-07-17 09:25:21 -05:00
Ed Page
f8d86dc165 refactor(help): Break term width calculation out 2023-07-17 09:17:52 -05:00
Ed Page
fcda411e5e chore: Release 2023-07-14 12:01:56 -05:00
Ed Page
6541df2c4b docs: Note user-values subject to value_delimiter
Inspired by #4999
2023-07-07 09:07:55 -05:00
Ed Page
cafdf58e02 chore: Release 2023-07-05 10:33:25 -05:00
Ed Page
99bcdfc6c7 style(builder): Be consistent in order 2023-07-05 10:10:34 -05:00
Ed Page
a50e32c135 feat(derive): Accept Boxed Str/OsStr/Path 2023-07-05 10:03:52 -05:00
Ed Page
916c8d93e1 feat(derive): Accept num::Wrapping wrapped types 2023-07-05 09:55:31 -05:00
Ed Page
f043f57559 feat(derive): Accept Box/Arc wrapped types 2023-07-05 09:53:41 -05:00
Ed Page
7353b2be34 chore: Release 2023-06-29 20:45:17 -05:00