Commit graph

2060 commits

Author SHA1 Message Date
rhysd
e666763acf feat(doc): Fix positions of indices 2021-10-19 16:30:25 +09:00
rhysd
012f318c97 feat(doc): Fix many typos in docs, comments and codes found by typos-cli 2021-10-19 10:38:22 +09:00
Ed Page
e2865c91be perf: Reduce allocations on 'args'
This seems like it'd have close to the same benefits as the suggestion
in the TODO, resolving it.
2021-10-18 16:14:31 -05:00
Ed Page
294cabf7c6 perf: Don't allocate a throw-away Vec 2021-10-18 16:14:31 -05:00
Pavan Kumar Sunkara
585e995811 Release 3.0.0-beta.5 2021-10-17 17:01:18 +01:00
Pavan Kumar Sunkara
e63760e461 Allow possible_values to take string vector reference
Makes it more backward compatible and flexible
2021-10-17 17:01:18 +01:00
Julius Michaelis
16af4f230a cosmetic: spec_vals on separate lines for long help 2021-10-17 22:43:06 +09:00
bors[bot]
1c2b09e57b
Merge #2890
2890: feat: Expose clap-style errors to users r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-17 00:12:07 +00:00
Ed Page
b9cc585997 feat: Expose clap-style errors to users
This gives users the basic error template for quick and dirty messages.
In addition to the lack of customization, they are not given anything to help
them with coloring or for programmayic use (info, source).

This is something I've wanted many times for one-off validation that
can't be expressed with clap's validation or it just wasn't worth
the hoops.  The more pressing need is for #2255, I need `clap_derive`
to be able to create error messages and `Error::with_description` seemed
too disjoint from the rest of the clap experience that it seemed like
users would immediately create issues about it showing up.

With this available, I've gone ahead and deprecated
`Error::with_description` (added in 58512f2fc), assuming this will be
sufficient for users needs (or they can use IO Errors as a back door).
I did so according to the pattern in #2718 despite us not being fully
resolved on that approach yet.
2021-10-16 19:03:17 -05:00
bors[bot]
d78d5a3744
Merge #2899
2899: Allow RegexSet for validator_regex r=epage a=pksunkara



Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
2021-10-16 21:40:07 +00:00
Pavan Kumar Sunkara
7dc176ab2a Allow RegexSet for validator_regex 2021-10-16 22:30:52 +01:00
bors[bot]
8647302296
Merge #2718
2718: fix: Ease clap2->clap3 migration with deprecations r=epage a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-16 17:52:21 +00:00
bors[bot]
219d59a57a
Merge #2891
2891: refactor: Use USAGE_CODE constant r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-16 01:40:15 +00:00
Ed Page
d3c85773c0 refactor: Use USAGE_CODE constant
I missed a case in #2604.  This will help people discover the
documentation describing why we chose the code we did.
2021-10-15 19:39:00 -05:00
bors[bot]
b835ce9061
Merge #2817
2817: Add support for Multicall executables as subcommands with a Multicall setting r=pksunkara a=fishface60



Co-authored-by: Richard Maw <richard.maw@gmail.com>
2021-10-16 00:32:52 +00:00
Ed Page
81e877c6c2 fix(help): Partial fix for 'help help'
Who knew people need to ask `help` for how to use `help`?

While auditing `MultpleValues`, I saw commented out code.   Looks
its commit (f230cfedc) was part of a large refactor and updating that
part fell through the cracks.  Just simply updating it didn't quite get
it to work.  The advantage of this approach is it gets us closer to how
clap works on its own.

In clap 2.33.3, `cmd help help` looks like
```
myapp-help
Prints this message or the help of the given subcommand(s)

USAGE:
    test-clap help [subcommand]...

ARGS:
    <subcommand>...    The subcommand whose help message to display
```

But clap3 master looks like:
```
myapp

USAGE:
    myapp [SUBCOMMAND]

OPTIONS:
    -h, --help    Print custom help about text

SUBCOMMANDS:
    help      Print this message or the help of the given subcommand(s)
    subcmd
```

This change improves it to:
```
myapp-help

Print this message or the help of the given subcommand(s)

USAGE:
    myapp help [SUBCOMMAND]...

ARGS:
    <SUBCOMMAND>...    The subcommand whose help message to display

OPTIONS:
    -h, --help    Print custom help about text
```

We still have global arguments showing up (like `-h`) that will error but its
an improvement!  In general, I'd like to find a way to leverage clap's stanard
behavior for implementing this so we don't have to worry about any of these
corner cases in the future.

Note: compared to clap2, I changed `<subcommand>` to `<SUBCOMMAND>` because I
believe the standard convention is for value names to be all caps (e.g.
`clap_derive` has been updated to default to that).
2021-10-15 18:24:15 -05:00
Richard Maw
b92f2c0339 fixup! formatting lint 2021-10-15 21:14:26 +01:00
Ed Page
a43da7ca61 fix: Ease clap2->clap3 migration with deprecations
- `App::with_defaults` was not included since that has been deprecated
  since 2.14
- `App::args_from_usage` does not have a close enough parallel in the
  new API, as far as I could tell
- `ArgMatches::usage` cannot have a thin wrapper around
  `App::generate_usage`.
- `App::write_*`: getting lazy, didn't seem like high value functions
- Any `Settings` (some things need to be figured out here)

This is a part of #2617
2021-10-15 14:19:16 -05:00
bors[bot]
f9208ae4e3
Merge #2886
2886: docs: Encourage multiple_occurrences r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-15 17:57:07 +00:00
Ed Page
59497629e8 docs: Encourage multiple_occurrences
There were fewer occasions than I expected where the use of
`multiple_values` was superfluous and we could instead use the more
predictable `multiple_occurrences`.

In terms of the remaining `multiple` split work, #1772 will take care of the derive
behavior and #2692 will resolve any remaining issues with values vs
occurrences in positional arguments.

Fixes #2816
2021-10-15 11:41:40 -05:00
Ed Page
6ee5fc4d5d fix(app): Rename generaet_usage to render_usage
This is inline with all of our other help-related functions that return
strings.

This is a part of #2164

BREAKING CHANEG: `App::generate_usage` (added in v3) ->
`App::render_usage`.
2021-10-15 09:36:44 -05:00
Ed Page
7f05c15a5e fix: Give Arg::help_heading priority over App::help_heading
PR #1211 originally added `help_heading` with the current priority
(`App::help_heading` wins).

In #1958, the author had proposed to change this

> Note that I made the existing arg's heading a priority over the one in App::help_heading

This was reverted on reviewer request because

> Thanks for the priority explanation. Yes, please make the app's help
> heading a priority. I can see how it would be useful when people might
> want to reuse args.

Re-using args is an important use case but this makes life difficult
for anyone using `help_heading` with `clap_derive` because the user
can only call `App::help_heading` once per struct.  Derive users can't get
per-field granularity with `App::help_heading` like the builder API.

As a bonus, I think this will be the least surpising to users.  Users
generally expect the more generic specification (App) to be overridden by the
more specific specification (Arg).  Honestly, I had thought this PR is
how `help_heading` worked  until I dug into the code with #2872.

In the argument re-use cases, a workaround is for the reusable arguments
to **not** set their help_heading and require the caller to set it as
needed.

Fixes #2873
2021-10-14 18:23:10 -05:00
bors[bot]
11453065c5
Merge #2871 #2872 #2876
2871: Better positional checks r=epage a=pksunkara



2872: Iterate on help_heading to prepare for derive support r=pksunkara a=epage



2876: Generate/bash: add possible_values to completion when available r=pksunkara a=nstinus



Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
Co-authored-by: Ed Page <eopage@gmail.com>
Co-authored-by: Nicolas Stinus <nstinus@latourtrading.com>
2021-10-14 20:23:54 +00:00
Ed Page
072d038d8f fix: Apply app help heading in App::args()
We aren't setting it when bulk-adding arguments.
2021-10-14 13:23:36 -05:00
Ed Page
9ee7fa2b01 feat(yaml): Implement help_heading support
Now that `help_heading`'s API is loosened with an `Into<Option>`, we can
more easily allow the existing yaml functionality to work.  This still
misses the ability to set the help heading to nothing.

This reverts commit 9031deb806.
2021-10-14 11:52:30 -05:00
Ed Page
ad3c5bcfb8 feat: Make it more natural to set heading
This makes `Some()` optional.  This change was made with the derive API
in mind where you are unlikely to clear directly but we still need the
ability to clear.
2021-10-14 11:52:15 -05:00
Ed Page
5bbcc0f4ba feat(app): Introspect current help heading
This will help for #2803 so we can capture and restore the help heading
around flattened derives.
2021-10-14 11:43:27 -05:00
Ed Page
a570976d92 fix(app): Make App and Arg help_heading consistent
In part, this is just fixing a papercut where someone will try to use
the API in the same way between the two but it fails and they'll have to
consult the docs / rust-analyzer.

The bigger reason is that this is more derive-friendly for dealing with #2803
since we will be able to just ask for the current help heading
before running the app and then restore it back, rather than having to
conditionalize the revert logic.
2021-10-14 11:39:51 -05:00
Ed Page
9031deb806 fix: Remove help_heading from YAML
Problems with this
- It is incompatible with the new signature planned for
  `App::help_heading`
- It is missing from `Arg` which is where this is more needed
- All this can do is set a global help heading because you can duplicate
  keys (`clap_derive` has a similar problem but it at least has `flatten`)
2021-10-14 11:39:51 -05:00
Pavan Kumar Sunkara
f371cfed29 fix: Better positional checks 2021-10-14 09:26:53 +01:00
Pavan Kumar Sunkara
2454dabc03 refactor: Remove get_flags API 2021-10-14 09:26:09 +01:00
Ed Page
61c9e6265b fix(help)!: Merge OPTIONS / FLAGS default groups
For those that want the original behavior, you can usxe
`arg.help_heading(Some("FLAGS"))` on your flags.  Limitations:
- This will not give you a special sort order
- This will not get a `[FLAGS]` added to usage

For templates, we removed `{unified}` and `{flags}`.  To help people
catch these, a debug_assert was added.

I'm unsure but I think there might be a change in behavior in calcuating
when to show `[OPTION]` in usage.  The old code only looked at
`required` while flags looked only at arg groups.  We now look at both.

Ideally we'd add these in `_build` and remove special casing for
no-groups except in the sort order of groups.  I feel like thats best
left for later.

This also reduced the scope of `App`s public API.
`get_*_with_no_heading` seemed a bit specialized to be in the public
API.  #2853 looks at splitting it out into its own PR.

BREAKING CHANGE: Multiple
- `UnifiedHelpMessage` removed
- `{flags}` and `{unified}` are removed and will assert when present.
- `get_*_with_no_heading` removed

Fixes #2807
2021-10-13 11:42:10 -05:00
Pavan Kumar Sunkara
efeb02cd34 fix!: Make color settings an enum 2021-10-13 13:54:44 +01:00
Pavan Kumar Sunkara
d46fd26c12 chore: Rename App::color to App::get_color 2021-10-13 02:20:04 +01:00
bors[bot]
d833d667df
Merge #2863
2863: fix(gen): Ensure subcommands are post-processed r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-12 21:23:54 +00:00
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
Richard Maw
b2180e9d72 fixup! Gate Multicall behind unstable feature 2021-10-12 20:35:59 +01:00
Ed Page
f48261a2a2 Partial Revert of "Change MissingArgumentOrSubcommand to DisplayHelpOnMissingArgumentOrSubcommand and don't use stderr"
This partially reverts commit 7f627fc.

This reverts the error code change but not the `ErrorKind` change.  I
was mixed on whether we should do that or not.  The benefit is it makes
it so people can check the Kind for cases like #2021.  On the other
hand, it doesn't seem that hard to re-implement the feature.

Fixes #2767
2021-10-12 14:09:08 -05:00
Paul Seyfert
25e337adb1 [clap_generate] [zsh] sort out multiple occurrence vs multiple_value. 2021-10-12 10:48:37 +01:00
bors[bot]
6d046c7aac
Merge #2848
2848: fix: Deprecate Macro API r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-12 07:36:50 +00:00
bors[bot]
a67aea232d
Merge #2852
2852: fix(help): Show [OPTIONS] with help_heading r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-12 00:55:16 +00:00
Ed Page
350ab9daf7 fix(help): Show [OPTIONS] with help_heading
This was changed in #1989 without an explanation:
- In the help template, there isn't a way to expose with help_headings,
  so show all.
- In usage, we don't know whether the user wants to see `[FLAGS]` /
  `[OPTIONS]` or not, so let's default to showing them.
2021-10-11 19:13:53 -05:00
Richard Maw
971b6b683e fixup! Move explanatory text from examples to docstring 2021-10-11 22:08:51 +01:00
Ed Page
0a53fafddf fix: Deprecate Macro API
Fixes #2835
2021-10-11 15:06:38 -05:00
Richard Maw
f14db03eec Add Multicall setting
If the AppSettings::Multicall setting is given
then argv0 is parsed as the first subcommand argument
or parsed as normal with any other name.
2021-10-11 20:00:24 +01:00
Ed Page
35d53d9dcf feat(generate): 'impl ArgEnum for Shell'
These keeps `FromStr` for ease of use with `value_of_t`.

This includes adding test to make sure everything works as expected.
2021-10-11 10:44:48 -05:00
bors[bot]
562e64c723
Merge #2845
2845: fix(help)!: Consoldiate color settings r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-11 14:17:10 +00:00
Ed Page
6dd9d467ce fix(help)!: Consoldiate color settings
A lot of users expected `color` feature flag and `ColorAuto` etc to
control all colors.  Having this extra flag around is easy to miss and
adds to our overall settings bloat, making it harder to find settings
people want.

This completely removes it, rather than make it deprecated like
functions in #2617, because there is extra work to mark things
deprecated as Settings and we should decide on our strategy first before
investing time in addressing that issue.

Fixes #2806
2021-10-11 09:01:13 -05:00
Waleed Khan
e73ec0887d add App::get_long_about 2021-10-10 17:17:55 -07:00
Ed Page
d840d5650e fix(derive)!: Rename Clap to Parser.
Before #2005, `Clap` was a special trait that derived all clap traits it
detected were relevant (including an enum getting both `ArgEnum`,
`Clap`, and `Subcommand`).  Now, we have elevated `Clap`, `Args`,
`Subcommand`, and `ArgEnum` to be user facing but the name `Clap` isn't
very descriptive.

This also helps further clarify the relationships so a crate providing
an item to be `#[clap(flatten)]` or `#[clap(subcommand)]` is more likely
to choose the needed trait to derive.

Also, my proposed fix fo #2785 includes making `App` attributes almost
exclusively for `Clap`.  Clarifying the names/roles will help
communicate this.

For prior discussion, see #2583
2021-10-09 20:12:03 -05:00
bors[bot]
e8ec11e57f
Merge #2837
2837: fix: Gate App::replace r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-09 16:27:41 +00:00
Ed Page
dfbeb71077 fix: Gate App::replace
We are concerned about the level of polish of this feature and are
unsure enough about its future, we've decided to gate it to unblock the
v3 release.
2021-10-09 10:49:10 -05:00
Kevin K
7b45695878
breaking(DisableVersionForSubcommands): removed
This commit removes `AppSettings::DisableVersionForSubcommand` as it's
now a moot setting with clap's default functionality of not building a
version flag unless there actually exists version information.

`clap_up` must still be changed to remove this variant instead of the
current configuration to simply rename the variant.
2021-10-09 11:12:50 -04:00
Kevin K
9fbe5841a7
chore: clippy lint fixes 2021-10-09 11:12:50 -04:00
Kevin K
bb26ed1c8b
imp: adds debug_asserts against generating meaningless flags
This commit adds several debug asserts that ensure the user has not
accidentally generated a version flag that has no information. The
exception to this case is when the user wants to generate a version
flag, but then handle the version display manually. I.e. one can still
generate a "meaningless" version flag, but use
`AppSettings::NoAutoVersion` which is allowed.
2021-10-09 11:12:50 -04:00
Kevin K
07aae5ac54
docs(AppSettings): documents NoAutoHelp and NoAutoVersion
Since these tie in closely with the new default behavior of not
auto-generating the `-V/--version` flags when no information has been provided they are now documented.
2021-10-09 11:12:50 -04:00
Kevin K
14c8850019
tests: fixes test to new default behavior
This commit corrects tests to not expect the `-V,--version` flag when no
version information has been provided.
2021-10-09 11:12:50 -04:00
Kevin K
7169c47fed
imp(version flag): no longer generates a version unconditionally
This commit changes the default behavior of clap to no longer generate a
`-V, --version` flag when no version information has been provided.

Version information can be provided via `App::version`,
`App::long_version`, or via `App::mut_arg("version", |_| ..)`. Using any
of the above is the only way to have clap auto-generate the version flag.

Technically, clap still generates a version flag, however it is removed
prior to parsing if the user has not provided any version information
via one of the mentioned methods.

Relates to [#2812](https://github.com/clap-rs/clap/issues/2812)
2021-10-09 11:06:48 -04:00
Ed Page
56a6a7418e fix: Allow unicode-aware case insensitivity with ArgValue
This also opens us up to being more unicode aware in other places, like
our sorting of arguments in the help.

Fixes #2792
2021-10-09 07:21:45 -05:00
Ed Page
7b5a4c9c2d feat: Add backtraces to errors
This is gated behind the `debug` feature flag so only explicit debugging
cases pay the build time and runtime costs.

The builder API's stack traces are generally not too interesting.  Where
this really helps is with `clap_derive`.  We currently panic on
unexpected conditions which at least gives us a backtrace.  We'd like to
turn these into errors but to do so would lose those debuggin
backtraces, which is where this comes in.

This is a part of #2255
2021-10-07 10:02:34 -05:00
Ed Page
62eff1f8d3
Merge pull request #2804 from epage/multiple
fix(parser): Allow multiple_occurrecnes with positional args
2021-10-04 13:57:33 -05:00
Ed Page
8e780e364d fix(parser): Allow multiple_occurrecnes with positional args
This unblocks
- Defining repeated tuples in positional arguments
- Potentially using this in #1772

Fixes #2784
2021-10-04 12:09:54 -05:00
patrick-gu
edd0124af0
Fix disabling the default help and version subcommands/flags (#2796)
* Check for `DisableHelpFlag` along with `NoAutoHelp`

Also applies for `DisableHelpSubcommand` and `DisableVersionFlag` with `NoAutoVersion`

* Add tests for overriding help and version, and disabling version.

These override by disabling the default and adding a new one.

* Don't use `default_missing_value` for `override_version_using_short`

* Check errors by the API.

This changes the `disabled_version_long` and `disabled_version_short` tests.

This is opposed to comparing the stderr output.
2021-10-04 15:01:09 +01:00
ModProg
08e8c53862 refactor(ArgEnum): replace unwrap with except, arg_value -> to_arg_value 2021-10-01 16:14:10 +02:00
Ed Page
3b2e3ffddf
Merge pull request #2762 from ModProg/ArgValue-derive
ArgValue derive
2021-10-01 08:43:40 -05:00
ModProg
47ff3ed945 documentation for ArgValue 2021-09-29 20:55:47 +02:00
ModProg
480035ac9c ArgEnum: Slice instead of array, from_str in ArgEnum implemented 2021-09-29 18:33:43 +02:00
Pavan Kumar Sunkara
5940bb2360
Merge pull request #2794 from ldm0/simplify
Less format & branch
2021-09-28 22:21:09 +01:00
ModProg
ac1a9d6d13 address epage's remarks 2021-09-27 22:06:17 +02:00
liudingming
3206db99af less format macro, less branches. 2021-09-27 23:34:13 +08:00
ModProg
76f7211d8b small changes 2021-09-27 01:29:10 +02:00
ModProg
f002cdcc99 move alias implementation to ArgValue for derive 2021-09-27 01:18:47 +02:00
ModProg
d3f0534939 add hidden aliases to ArgValue 2021-09-26 22:46:23 +02:00
liudingming
7ba46400e4 Resolve a todo 2021-09-27 02:03:28 +08:00
Roland Fredenhagen
88d7d02555 Working Implementation 2021-09-26 16:32:46 +02:00
ModProg
b589a6ce06 feat(derive:arg_enum): use ArgValue in ArgEnum trait 2021-09-26 16:32:46 +02:00
Pavan Kumar Sunkara
699a3f76d6 Implement BitOr for settings 2021-09-23 14:57:10 +05:30
Roland Fredenhagen
5580e8c465
ArgValue builder (#2758)
* feat(arg_value): ArgValue can be used for possible_values

Through the ArgValue it is possible:

* `hide` possible_values from showing in completion, help and validation
* add `about` to possible_values in completion

* Resolved a few change-requests by epage

* make clippy happy

* add ArgValue::get_visible_value

* remove verbose destructering

* rename ArgValue::get_hidden to ArgValue::is_hidden

* add test for help output of hidden ArgValues

* Documentation for ArgValue

There is an issue that required to implement From<&ArgValue> for
ArgValue. We should probably find a solution without that.

* fix requested changes by epage

* fix formatting

* add deref in possible_values call to remove From<&&str>

* make clippy happy

* use copied() instad of map(|v|*v)

* Finishing up for merge, hopefully

* changes requested by pksunkara
2021-09-19 10:29:09 +00:00
patrick-gu
90dde89ec4 Apply value_delimiter to default values 2021-09-18 15:15:25 -07:00
Ed Page
b3847b76c4 refactor: Remove vec_map dependency
Doesn't look like this dependency is buying us anything at this point,
so removing it.
2021-09-17 15:14:49 -05:00
Pavan Kumar Sunkara
76859b16bb
Merge pull request #2773 from tangmi/fix-large-display-order
Add test for very large display_order values and a possible fix
2021-09-17 19:39:37 +01:00
Mustafa Guler
50b9e65d39 Fix bug with duplicate error messages
This addresses a bug that causes duplicate flags reported in user-facing
error messages when two flags require one-another but also are required
under other conditions. The fix involves removing duplicates in unrolled
requirements, which addresses the user-facing aspect of this bug.
2021-09-17 10:47:06 -04:00
Michael Tang
cc592ed800 Add test for very large display_order values and a possible fix.
Fixes #2772
2021-09-16 19:11:30 -07:00
patrick-gu
044f9c5669
Don't suggest help or --help when not applicable (#2749)
* Don't suggest `help` or `--help` when not applicable

* Apply suggestions from code review

Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>

* Update test usage to match intended

Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
2021-09-04 20:10:24 +00:00
dylni
6311c894cc Fix compile errors 2021-08-29 10:24:56 -04:00
dylni
a50591b16b Fix warnings 2021-08-29 10:10:26 -04:00
dylni
dc65513966 Replace ArgStr with os_str_bytes::RawOsStr 2021-08-29 10:00:30 -04:00
liudingming
898894cf35 Make clap::Error Send and Sync again 2021-08-29 17:21:08 +08:00
liudingming
f200828045 Add regression test 2021-08-29 17:21:08 +08:00
Pavan Kumar Sunkara
f085fa64f4
Merge pull request #2722 from epage/group
fix(yaml): Don't panic on multiple groups
2021-08-19 07:40:41 +01:00
Ed Page
bd25b5f615 fix(yaml): Don't panic on multiple groups
Because we gradually build the `ArgGroup` as we parse the YAML, we don't
use `ArgGroup::new`.  Clap3 introduced an internal `id` in addition to
the public `name` and it appears that this custom initialization code
was not updated.

This shows the problem with publically exposing `impl Default`.
Choices:
- Remove `impl Default`
  - Always valid
  - Requires spreading invariants
  - Callers can't implement code the same way we do
- Add `ArgGroup::name`
  - Can be constructed in an invalid state
  - Centralizes invariants
  - A caller could implement code like the yaml logic

I decided to go with `ArgGroup::name`.

Fixes #2719
2021-08-18 15:16:44 -05:00
Ed Page
aeaf01e3e7 fix: Provide path to avoid UTF-8 panics
Before, validating UTF-8 was all-or-nothing and would cause a `panic` if
someone used the right API with non-UTF-8 input.

Now, all arguments are validated for UTF-8, unless opted-out.  This
ensures a non-panicing path forward at the cost of people using the
builder API that previously did `value_of_os` need to now set this flag.

Fixes #751
2021-08-18 14:15:18 -05:00
Ed Page
329fe4a24b fix: Swallow broken pipes
Previously, we paniced.  This is one less reason people have to call
lower level `get_matches` to get the commonly expected behavior, making
it more likely for the Rust community to "do the right thing"

Fixes #2659
2021-08-18 10:16:57 -05:00
Donough Liu
0394ae6102
Fix handling of number_of_values when displaying arg (#2701)
* Remove dead logic

* Outline common logic

* Fix issue 1571
2021-08-17 09:17:18 +00:00
Pavan Kumar Sunkara
9d5cf64d6a
Merge pull request #2704 from jrheard/patch-1
fix typo
2021-08-16 10:45:33 +01:00
JR Heard
465d495b6d
fix typo 2021-08-15 20:02:18 -07:00
Pavan Kumar Sunkara
9dd75987df Remove TakesValue restriction for HideEnv* 2021-08-15 19:40:24 +01:00
Pavan Kumar Sunkara
52be134949 Release 3.0.0-beta.4
clap@3.0.0-beta.4
clap_derive@3.0.0-beta.4
clap_generate@3.0.0-beta.4

Generated by cargo-workspaces
2021-08-14 23:40:49 +01:00
Pavan Kumar Sunkara
73b28fb104 Release 3.0.0-beta.3
clap@3.0.0-beta.3
clap_derive@3.0.0-beta.3
clap_generate@3.0.0-beta.3

Generated by cargo-workspaces
2021-08-14 23:01:13 +01:00
Pavan Kumar Sunkara
a9b86ecefc Update changelog 2021-08-14 22:46:49 +01:00
TheDaemoness
f411a65d82
Fix invalid_value returning an Error with no info 2021-08-14 11:28:51 -07:00
Pavan Kumar Sunkara
203613d5e3
Merge pull request #2696 from ldm0/override
Make `overrides_with` working when `MultipleValues` is enabled.
2021-08-14 10:41:40 +01:00
liudingming
a85857dfb0 Make overrides_with working when MultipleValues is enabled. 2021-08-14 16:34:26 +08:00
Pavan Kumar Sunkara
441ff68c2d
Merge pull request #2694 from clap-rs/env-feature
Add env feature gate
2021-08-14 03:11:21 +01:00
Pavan Kumar Sunkara
c7985fb73e Add env feature gate 2021-08-14 01:55:05 +01:00
Pavan Kumar Sunkara
61eb921f63 Fix value_names & num_vals interaction 2021-08-14 01:08:44 +01:00
Ed Page
2eb22e2b36 fix!: value_name/value_names should not append
Instead they should behave like `default_value`/`default_values`.

In implementingt this, I didn't see any reason to be using a `VecMap`.
In fact, this helped simplify the code / make intent clearer.

With this, we are also able to simplify the derive macro work from #2633.

Fixes #2634

BREAKING CHANGE: `value_name`/`value_names` always overwrite, rather
than append.  We expect the impact to be minimal.
2021-08-13 15:37:03 -05:00
Pavan Kumar Sunkara
24bfd2b92c Fix test errors 2021-08-13 20:58:38 +01:00
Pavan Kumar Sunkara
d64ced0311
Merge pull request #2686 from ldm0/delimiter
Make `value_delimiter` accept `char` rather than `String`
2021-08-13 20:53:21 +01:00
liudingming
a60836d96a Make value_delimiter accept char rather than String 2021-08-14 02:54:56 +08:00
liudingming
a8060d305b Tweaks ArgsNegateSubcommands's doc 2021-08-14 02:30:27 +08:00
Pavan Kumar Sunkara
476dd190b7
Merge pull request #2682 from clap-rs/checker
Set TakesValue to true for positional args when building
2021-08-12 22:46:15 +01:00
Pavan Kumar Sunkara
8f2ba607aa
Merge pull request #2534 from stevenengler/hide-heading
Hide help heading when all args are hidden
2021-08-12 21:32:07 +01:00
Pavan Kumar Sunkara
b4a662b6c9 Set TakesValue to true for positional args when building 2021-08-12 21:27:42 +01:00
Steven Engler
1bd63feffe Hide help heading when all args are hidden 2021-08-12 00:51:58 +01:00
Pavan Kumar Sunkara
6ae15a79b6 Remove settings that are inherently global 2021-08-11 22:41:25 +01:00
rami3l
5a965caf1e feat(parser): accept non-false literals with env vars as true, take 2 2021-08-10 19:13:43 +02:00
rami3l
5f781c72a5 feat(parser): accept non-false literals with env vars as true 2021-08-10 12:21:12 +02:00
rami3l
d32b6bf764 fix(test): fix doc test 2021-08-10 12:21:12 +02:00
rami3l
f2f9b665ed feat(parser): accept boolean literal with env vars, take 1 2021-08-10 12:21:02 +02:00
liudingming
696f93c4f5 Fix some work on ArgStr 2021-08-09 04:26:01 +08:00
liudingming
5f70e38c2a Optimize ArgStr 2021-08-09 02:22:31 +08:00
liudingming
216aab2479 Remove TrailingValues from app settings 2021-08-08 03:41:23 +08:00
liudingming
963aa1977d Remove ValidArgFound from app settings 2021-08-08 03:41:23 +08:00
liudingming
e851a82080 Move pos_counter before parsing flags.
Then checking if AllowHyphenValues is set when parsing flag is possible.
2021-08-08 03:38:41 +08:00
liudingming
b88d933d96 Extract erroring from parsing.
Rename needs_valueof to parse_result

Use ParseResult more

Less predicting, more fallback

Remove non-sense ParsingResult::NotFound

Merge FlagSubCommand and FlagSubCommandShort

Merge NoMatchingLongArg and NoMatchingShortArg

Better documentation for pos_counter bumping

Denoise of pos_counter

Split ParseState from ParseResult

Remove ParseResult::Flag

small cleanup
2021-08-08 03:38:40 +08:00
liudingming
82d25401a0 Move logic out 2021-08-08 03:34:10 +08:00
liudingming
ca8623c774 Remove duplicate empty value checker 2021-08-08 03:34:10 +08:00
liudingming
d2fec9128f fmt::write -> push_str 2021-08-08 00:25:51 +08:00
rami3l
adc34a2680 fix(style): eliminate several clippy warnings 2021-08-02 22:31:59 +02:00
Pavan Kumar Sunkara
4bec66dd03
Merge pull request #2619 from rami3l/flag-literal
fix(parser): Ban long flags with literals
2021-08-01 12:31:29 +01:00
rami3l
7f8f5ccc9a Revert "fix(style): fix code format warning"
This reverts commit a4a4d4c307.
2021-08-01 11:41:29 +02:00
Abyss
faa25f9e67 Make colorizer respect ColorChoice::Always 2021-07-31 18:12:54 -04:00
liudingming
ab119b342a Fix value_of returns None when the first value group is empty 2021-08-01 03:56:23 +08:00
patrick-gu
88dec14775
Fix order of arguments in help message with AllowMissingPositional (#2648)
* Fix small formatting error

I accidentally introduced this in #2642

* Fix order of arguments in help message with AllowMissingPositional
2021-07-31 07:39:23 +01:00
Pavan Kumar Sunkara
ff95eb2f5b
Merge pull request #2647 from clap-rs/msrv
Bump msrv to 1.54.0
2021-07-31 05:45:02 +01:00
Pavan Kumar Sunkara
619f4c153c Fix format 2021-07-30 23:01:05 +01:00
Pavan Kumar Sunkara
6994be4f15 Remove doc feature 2021-07-30 22:49:11 +01:00
rami3l
a4a4d4c307 fix(style): fix code format warning 2021-07-30 22:33:56 +02:00
rami3l
29e3dc2c47 fix(parser): run check_for_help_and_version_str only if no literal is found with flag 2021-07-30 22:33:56 +02:00
rami3l
87479dfb8c fix: ban all uses of literals with flags 2021-07-30 22:33:56 +02:00
rami3l
2d2db652ef fix: fix #1649, take 1 2021-07-30 22:33:56 +02:00
Ed Page
241d183b9c Bump MSRV to 1.54.0
- This makes it so `doc` compiles on stable

Fixes #2618
2021-07-30 10:19:21 +01:00
liudingming
a419f25fdb Fix issue, add tests 2021-07-30 15:39:34 +08:00
liudingming
3791f7e5ad Fix long_arg 2021-07-30 15:39:34 +08:00
liudingming
5ab16f7199 Improve parse_long_arg 2021-07-30 15:39:34 +08:00
liudingming
e8838e1794 fix clippy 2021-07-30 15:39:34 +08:00
liudingming
9509372f12 Improve parse_opt 2021-07-30 15:39:34 +08:00
Pavan Kumar Sunkara
6ea223bc6e
Merge pull request #2644 from ldm0/clippy
Fix clippy
2021-07-30 08:38:34 +01:00
liudingming
44b7eee404 Fix clippy 2021-07-30 13:36:38 +08:00
patrick-gu
a4dc72ed19 Replace "Prints" with "Print" for default help and version commands 2021-07-29 20:23:25 -07:00
Ed Page
6a70c744e0 fix(derive): Allow partial update of flattened Subcommand arguments
When using `#[clap(flatten)]` inside of a `Subcommand`, we would do a
`from` instead of an `update`.

The challenge is knowing when we are
going into a flattened subcommand vs changing the variant.  To resolve
this, I added a `Subcommand:has_subcommand(name)` trait method that we
generate, so we can ask.
2021-07-27 12:14:53 -05:00
Pavan Kumar Sunkara
5fbd764b06
Merge pull request #2622 from patrick-gu/master
Refactor creation of `App` and `Arg` from YAML
2021-07-27 10:31:55 +01:00
Ed Page
d643fb3c32 feat(derive): Make it possible to use ArgEnum with default_value
This doesn't solve the problem end-to-end but at least makes it possible
to solve by the user and improve in the future.
2021-07-26 10:33:14 -05:00
patrick-gu
9b64ac2b45 Refactor creation of App and Arg from YAML
Improved the `impl`s of `From` for `&'help Yaml` to use expects with useful messages instead of unwraps. Also made changes to avoid potentially fetching redundant data from YAML hashes and unwrapping the same data multiple times. Finally, there are tests to ensure the panics are correct.
2021-07-25 15:24:43 -07:00
Pavan Kumar Sunkara
79e3b37ecc
Merge pull request #2604 from epage/exit
fix(exit): Be consistent in exit code
2021-07-25 14:32:47 +01:00
Pavan Kumar Sunkara
27311139c2
Merge pull request #2610 from ldm0/value_name
Print `value_name` `number_of_values` times with single value_name
2021-07-25 14:23:21 +01:00
liudingming
62fa1e7454 Print value_name number_of_values times with single value_name 2021-07-21 03:38:58 +08:00
liudingming
6094520541 Don't show default_val in smart usage 2021-07-21 02:50:41 +08:00
Ed Page
6e24c849fb fix(exit): Be consistent in exit code
PR #1637 switched clap to report `64` on errors and then #1653 switch it
to `2`, but both missed a case.  This also documents the reason why inline
since I had to go and dig through the history to re-discover the
motivation.
2021-07-19 11:21:01 -05:00
hosseind88
cc2e07ea61 Remove a redundant word in AppSettings::NoBinaryName enum explanation 2021-07-19 17:56:57 +04:30
Ed Page
7f08773a5a fix(derive)!: Compile-error on nested subcommands
Before, partial command lines would panic at runtime.  Now it'll be a
compile error

For example:
```
pub enum Opt {
  Daemon(DaemonCommand),
}

pub enum DaemonCommand {
  Start,
  Stop,
}
```

Gives:
```
error[E0277]: the trait bound `DaemonCommand: clap::Args` is not satisfied
   --> clap_derive/tests/subcommands.rs:297:16
    |
297 |         Daemon(DaemonCommand),
    |                ^^^^^^^^^^^^^ the trait `clap::Args` is not implemented for `DaemonCommand`
    |
    = note: required by `augment_args`
```

To nest this, you currently need `enum -> struct -> enum`.  A later
change will make it so you can use the `subcommand` attribute within
enums to cover this case.

This is a part of #2005
2021-07-15 11:45:13 -05:00
Pavan Kumar Sunkara
894be6799c
Merge pull request #2585 from epage/argenum
fix(derive): `Clap` should not derive `ArgEnum`
2021-07-14 18:01:31 +01:00
Ed Page
6cc76e7237 fix(derive): Clap should not derive ArgEnum
While having convinience derives can be helpful, deriving traits that
are not used in similar situations (`Clap` and `ArgEnum`) can make
things harder
- From a user, derives are opaque and create uncertainty on how to use
  the API if not kept crystal clear (deriving a name gives you the trait
  by that name)
- This makes documentation harder to write and read
- You can use types in unintended places, which is made worse for crate
  APIs because changing this breaks compatibility.

Fixes #2584
2021-07-14 10:50:26 -05:00
Pavan Kumar Sunkara
af6f7af368
Merge pull request #2577 from tshepang/fix-links
fix remaining intra-doc links
2021-07-13 00:43:28 +01:00
Ed Page
3be79b9e1b
docs(derive): Update trait doc-comments (#2579)
* docs(derive): Update trait doc-comments

* Apply suggestions from code review

Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
2021-07-12 21:43:03 +01:00
codedust
15d49064c3
Fix grammar in require_delimiter fn docs 2021-07-11 12:19:54 +02:00
Tshepang Lekhonkhobe
b4eddf158d fix remaining intra-doc links 2021-07-10 21:00:34 +02:00
Tshepang Lekhonkhobe
f5758034f0 fix a bunch of intra-doc links 2021-07-03 23:59:46 +02:00
anatawa12
89d1519f69
Show summary in subcommands list (#2558)
* Show short about in SUBCOMMANDS list

* add tests

* move test

* cargo fmt
2021-06-20 16:28:50 +01:00
Ethan Budd
6a48698fcd
Add a new arg option for the max_occurrences (#2543)
* add a new arg option for the max_occurrences

* check ErrorKind in tests

* Updated grammer in doc comments

Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>

* assert is_err() before unwraping

Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
2021-06-17 19:54:24 +01:00
Pavan Kumar Sunkara
373ded784c Fix clippy lint 2021-06-17 19:19:56 +01:00
Rémi Lauzier
c4f534228b
Fix some nightly clippy warnings 2021-06-16 23:25:13 -04:00
Pavan Kumar Sunkara
947523f7f5
Merge pull request #2480 from kolloch/feature/partial-parsing
setting: IgnoreErrors - Allow parsing despite missing option values
2021-06-16 09:09:52 +01:00
Pavan Kumar Sunkara
e5e20b389e Forbid multiple_occurrences for positional args 2021-06-16 08:27:04 +01:00
Pavan Kumar Sunkara
3f94d17c71 Removed Arg::multiple 2021-06-16 07:17:11 +01:00
Pavan Kumar Sunkara
43909ddefc Fix some docs for app settings 2021-06-16 02:54:49 +01:00
Peter Kolloch
171dcbe424 setting: IgnoreErrors - Reaction to review comments
https://github.com/clap-rs/clap/pull/2480
2021-06-14 10:26:23 +02:00
Peter Kolloch
b0310e2d6e settings: IgnoreErrors - prefix debug statements with fn name 2021-06-14 10:26:23 +02:00
Peter Kolloch
c50d338962 setting: IgnoreErrors - Allow parsing despite missing option values
Implemented as AppSetting::Ignore errors as suggested by
@CreepySkeleton in
https://github.com/clap-rs/clap/issues/1880#issuecomment-637779787.

This is not a complete implementation but it works already in
surprisingly many situations.

https://github.com/clap-rs/clap/issues/1880
2021-06-14 10:26:18 +02:00
Tshepang Lekhonkhobe
e3bfa50e8f
docs: fix links to Subcommand (#2518)
* docs: fix links to Subcommand

These were broken by 03333800fe

* docs: remove crate links from body content

Addresses code review

* docs: allow some room to breath

Addresses code review
2021-06-07 11:19:45 +01:00
rami3l
6e158d9f8d
refactor(validator): cleanup code (#2512)
* refactor(validator): use filtermap style for `gather_conflicts` and `validate_exclusive`

* refactor(validator): remove nested `filter`s in `build_conflict_err_usage`

* refactor(validator): add more code beautifying

* refactor(validator): revert some unnecessary changes

* refactor(validator): revert some unnecessary changes, take 2
2021-06-07 00:45:45 +01:00
Terts Diepraam
6a574bf73c
Fix documentation for InferLongArgs
Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
2021-06-06 12:32:32 +02:00
Terts Diepraam
834f600a6f infer long arguments 2021-06-05 13:18:06 +02:00
Pavan Kumar Sunkara
82e42cd07e Ignore extra fields in YAML only when specified 2021-06-01 21:59:44 +01:00
rami3l
a91ca7fc1b refactor(parser): encode all parsing state of FlagSubCommand in Parser 2021-05-29 21:26:21 +02:00
rami3l
65b3892ef6
docs: add more explanation to #2501 fix (#2507)
* fix(parser): replace `unwrap` with `expect`

* docs(parser): add more comments explaining `done_short_args`

* docs(parser): add more comments explaining `keep_state`
2021-05-28 21:51:00 +01:00
rami3l
fbd338ce26
fix: flag_subcommands unexpected behavior after long arg (#2501)
* fix(wip): add necessary debugging prints for analysis

* fix(wip): implement the fix, take 1

* docs: add docstring for `Parser::flag_subcmd_at` and `Parser::flag_subcmd_skip`

* test: make `flag_subcommand_short_after_long_arg` test more realistic
2021-05-27 05:14:50 +05:30
Pavan Kumar Sunkara
6a395d3208 ArgMacthes::is_present should not deal with subcommands at all, fixes #2494 2021-05-26 00:40:38 +01:00
Ajeet D'Souza
5809ae6060
feat: Add AppSettings::DisableEnv (#2493)
* Add DisableEnv flag

* Apply formatting

* Add tests
2021-05-21 00:47:47 +05:30
Ajeet D'Souza
460459c771
fix(usage): Move positional args to end of usage string (#2492)
* Move positional args to end of USAGE

* Remove -- from usage string
2021-05-21 00:29:21 +05:30
Eldritch Cheese
fa991754d3 imp(validator): Case-insensitive required_if_eq when arg is case-insensitive 2021-05-15 09:45:24 -07:00
Peter Kolloch
e89f1e6c4d Input.insert: No need to clone 2021-05-13 13:29:01 +02:00
liudingming
529c55f753 Relax trait bound on clap Error source 2021-05-08 01:56:13 +08:00
liudingming
64e226ef33 Add multiple_* parsing for yaml 2021-05-07 14:34:03 +08:00
sharnoff
5ec28b6093
add missing $crate:: in clap_app! 2021-04-25 19:00:19 -07:00
Pavan Kumar Sunkara
9c99c358c6
Merge pull request #2440 from reaganmcf/app-setting-subcommand-help-long-form
setting: UseLongFormatForHelpSubcommand
2021-04-13 04:42:51 +05:30
Reagan McFarland
b184dc001b setting: SubcommandHelpShowsLongForm implemented
Refactoring and better test cases

Refactored SubcommandHelpShowsLongForm to
UseLongFormatForHelpSubcommand.
Tests and docuemntation examples use about and long_about instead of
(before/after)_help.

Removed commented out tests

Linting: Fix trailing new line

Updated change log, refactored tests and doc str

Reordered items in the Changelog
New test added and old tests removed that were redundant
Doc string for AppSettings::UseLongFormatForHelpSubcommand fixed
2021-04-11 14:31:40 -04:00
Pavan Kumar Sunkara
3c9cc0cf91 Specify dep patch versions 2021-04-11 10:38:13 +01:00
Pavan Kumar Sunkara
52814b893c
Merge pull request #2415 from cbzehner/ignore-extra-fields-on-arg
Ignore extra fields in Arg yaml definitions
2021-03-14 14:00:30 +05:30