Commit graph

4400 commits

Author SHA1 Message Date
bors[bot]
b9d007d262
Merge #2988
2988: refactor(tests): Prepare for Special Type experiments r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-05 07:44:30 +00:00
bors[bot]
4dfa56a9e4
Merge #2989
2989: fix: Allow unicode aware case insensitivity r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-04 20:28:49 +00:00
Ed Page
78e4c90326 refactor(tests): Prepare for Special Type experiments
In experimenting on #1772, I want to write test cases for various
combinations of required or not, values vs occurrences, etc.  There
wasn't really a clear place to put these.

On top of that, I wanted there to be a clear place in the tests for
describing the behavior of special types, to make it easier to audit and
easier to see how a PR for #1772 changes things.

As part of this effort in organizing these tests, I reduced the number
of tests that use special types.  This better focuses these tests on the
cases they are intending to cover, rather than pulling in unrelated
features.  This makes it easier to audit special types and makes it so
failures give more focused results, making it easier to see what broke.
2021-11-04 13:12:01 -05:00
Ed Page
4b0048666a fix: Allow unicode aware case insensitivity
In #2985, I noticed #2834 was incomplete, there were case-insensitive
comparisons we were doing without being unicode aware (when compile
options are set).

The downside is that each comparison will require a UTF-8 validation.
These seem to be in more of corners of the API, rather than in common
calls in common usages, so hopefully that isn't too much of a problem.
2021-11-04 12:23:02 -05:00
bors[bot]
879dd23963
Merge #2986
2986: Revert #2950 to make sure we get it properly in #2985 r=epage a=pksunkara



Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
2021-11-03 18:51:19 +00:00
Pavan Kumar Sunkara
98f696c0a6 Revert "Revert "docs: Clarify corner caseses with default values""
This reverts commit 4edcda2b99.
2021-11-03 18:27:12 +00:00
Pavan Kumar Sunkara
5e76e6c568 Revert "Added ArgMatcher::is_default_value abstraction"
This reverts commit 261a2c00e8.
2021-11-03 18:26:15 +00:00
Pavan Kumar Sunkara
736cb28dd0 Revert "Fixes group conflicting with arg which has default value"
This reverts commit 8c76556ac4.
2021-11-03 18:25:53 +00:00
Pavan Kumar Sunkara
706085d9c5 Revert "Fixes arg conflicting with group whose arg has default value"
This reverts commit 64a2866b09.
2021-11-03 18:25:25 +00:00
Pavan Kumar Sunkara
4e370bb093 Revert "Fixes group conflicting if two args with default values"
This reverts commit 01869744c2.
2021-11-03 18:24:50 +00:00
Pavan Kumar Sunkara
bd8c36cf04 Revert "Fixes arg and group with default value having requires"
This reverts commit 130dcbfdd9.
2021-11-03 18:22:19 +00:00
Pavan Kumar Sunkara
8818327b25 Revert "Fixes arg having required_if on default values"
This reverts commit a88562c12b.
2021-11-03 18:20:39 +00:00
Pavan Kumar Sunkara
6e85fb3ae0 Revert "Fixes arg having required_unless on default values"
This reverts commit ac1de1fc78.
2021-11-03 18:18:54 +00:00
bors[bot]
3cc46a1c83
Merge #2984
2984: fix: Switch sub-commands from multi-val to multi-occur r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-03 16:59:25 +00:00
Ed Page
8212647bb3 fix: Switch sub-commands from multi-val to multi-occur
Similar to #2977, this changes positional argument `<subcmd>` in
`help <subcmd>` to be multiple occurrences, from being multiple values.

This is what identified the usage generation bug fixed in #2978 and was
isolated into the test case `positional_multiple_occurrences_is_dotted`.

This is part of #2692 where we re-evaluate the usage of multiple values
for positionals now that we accept multiple occurrences.
2021-11-02 20:55:43 -05:00
bors[bot]
ae48175207
Merge #2977
2977: fix(usage)!: Switch positionals... from multi-val to mulit-occur r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-03 01:47:44 +00:00
bors[bot]
9365f6a0af
Merge #2907
2907: fix: Ease clap2->3 transition for Settings r=kbknapp a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-03 00:41:14 +00:00
bors[bot]
acaa3645c3
Merge #2980
2980: test: Easier to test with minimal features r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-02 22:02:31 +00:00
Ed Page
844251c478 test: Easier to test with minimal features
PR #2979 reduced what dependencies we push on users and made us one step
closer to being able to test more with fewer features.  Looks like I
also need to update `clap_derive`.  I verified locally that #2976 fails
with this.

`clap_derive` still needs `env` because of examples / tests that use it.
I feel like moving `clap_derive`s tests out to `clap` would be the way
to fix this.
2021-11-02 16:40:31 -05:00
Ed Page
a9c6a5b531 refactor(tests): Remove unnecessary color disabling
The tests are using `to_string` which maps to `Display::fmt` and the
`Colorizer` version is colorless.  To get color, it is only supported
with `print()` which has to go to stdout / stderr and can't be directed
to an arbitrary stream.
2021-11-02 16:40:31 -05:00
bors[bot]
bb396a1d51
Merge #2978
2978: fix: Always respect positional occurrences r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-02 20:44:53 +00:00
bors[bot]
c8acf5debd
Merge #2976
2976: fix: Loosen reflection lifetimes r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-01 21:41:34 +00:00
Ed Page
ade6028da1 fix: Loosen reflection lifetimes
Though we store a lot of values as `&'help str`, we return them as
`&'self str`, making it so they can not be used programmatically as part
of a `App::mut_arg` call.

This loosens the lifetimes so they can be used with `App::mut_arg`.
This also includes a test simulating the desired workflow described in #2966

I skipped `get_all_aliases`.  I ran into problems with lifetimes with
`all_subcommand_names`  and didn't quickly resolve it.  Rather than hold
this up, I punted on it for now.

We'll have to tighten these back up with #1041 but that will also enable
turning them into owned strings, so this will still be possible after
that issue is resolved, just the calls will be slightly different.
2021-11-01 16:28:43 -05:00
bors[bot]
0adfb0fd76
Merge #2979
2979: fix(fig): Reduce deepdencies r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-11-01 20:06:53 +00:00
Ed Page
416b38c43e fix(fig): Reduce deepdencies
Like with #2903, we are depending on more features than needed, forcing
them onto users.  This also impacts our testing since we aren't truly
getting minimal test runs (see #2976).
2021-11-01 14:50:36 -05:00
Ed Page
66341b3c11 fix: Always respect positional occurrences
When supporting multiple occurrences for positional arguments in #2804,
I added some tests to cover this but apparently simpler cases fail
despite those more complicated cases being tested.

This adds more multiple-occurrences tests for positional arguments,
fixes them, and in general equates multiple values with occurrences for
positional arguments as part of #2692.  There are a couple more points
for consideration for #2692 for us to decide on once this unblocks them
(usage special case in #2977 and how subcommand help should be handled).

I fully admit I have not fully quantified the impact of all of these
changes and am heavily relying on the quality of our tests to carry this
forward.
2021-11-01 14:14:04 -05:00
Ed Page
dd2c4c6346 fix(usage)!: Switch positionals... from multi-val to mulit-occur
I noticed this while investigating #2692.  Since we are making
multiple-occurrences a thing for positional arguments, this allows us to
remove a special case.

Another way to look at this is that we should make the default whatever
we do for dervies (#1772).  I'm going to propose we make the derive
always turn `Vec<i32>` into multiple occurences and not multiple values
(with users being able to change it through attributes), but that is an
in-work proposal and not decided yet.

BREAKING CHANGE: `Arg::from(...)` will now use `multiple_occurrences`
for a positional `...`, rather than `multiple_values`.
2021-11-01 12:15:00 -05:00
bors[bot]
96e7dfeb43
Merge #2969
2969: refactor: Allow partially used genned code r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-31 10:32:32 +00:00
bors[bot]
0fe384101f
Merge #2974
2974: fix(usage)!: Separate mutli-occ from multi-val syntax r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-30 19:47:32 +00:00
bors[bot]
dfa4690c96
Merge #2972 #2973
2972: refactor: Remove unused variable r=pksunkara a=epage



2973: test(usage): Make cases more consistent r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-30 18:05:11 +00:00
Ed Page
53bd42a809 fix(usage)!: Separate mutli-occ from multi-val syntax
In looking at multiple occurrences and values for issues like #2692, I
noticed that `...` can mean both multiple values and multiple
occurrences, like before we split them.

Pros
- No syntax change with clap3

Cons
- All the reasons we split `multiple` into two

Uncertain
- I originally started this as part of another branch but I lost track
  if something depended on this.  I'll have to do more digging

BREAKING CHANGE: If `--opt [val]...` was meant for
- only multiple occurrences, see `[opt]... --opt [val]`
- both multiple occurrences and values, see `[opt]... --opt [val]...`
2021-10-30 12:56:49 -05:00
Ed Page
92df0ba263 test(usage): Make cases more consistent
Besides being more explicit / clear, this makes it easier to experiment
with tweaking the logic and keeping the test updates minimal, so the
change of behavior stands out more.
2021-10-30 12:11:49 -05:00
bors[bot]
0e674bcb48
Merge #2968 #2971
2968: test(derive): Provide better error info r=pksunkara a=epage



2971: Fix grammar in doc comment r=epage a=QuantumCoded



Co-authored-by: Ed Page <eopage@gmail.com>
Co-authored-by: Jeffrey <QuantumCoded@users.noreply.github.com>
2021-10-30 16:53:07 +00:00
Ed Page
7661f1f50d refactor: Remove unused variable 2021-10-30 11:46:39 -05:00
bors[bot]
605aa05af8
Merge #2970
2970: chore(error): Remove unused backtrace warning r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-30 15:45:27 +00:00
Jeffrey
d6c2ab4891
Fix grammar in doc comment
Added space after period in doc comment for `subcommand_name`
2021-10-30 10:37:14 -05:00
Ed Page
391980286e refactor: Allow partially used genned code
Wow, I'm having a hard time summarizing this for the summary.

When we code-gen Settings using `impl_settings`, we have no control over
whether one instance of a Settings will use some or all functions.  I
have a fix that removes the one `ArgSettings::unset`, causing warnings
for `ArgSettings` despite needing it for `AppSettings`.

So I'm making it less dependent on how each instantiation uses it.
2021-10-30 10:29:39 -05:00
Ed Page
4b7ed54d7e test(derive): Provide better error info
`Parser::parse_from` will call `exit` on failure and we don't just lose
backtrace information but we don't even know which of the tests running
in parallel panicked.  I ran into this when experimenting with
`clap_derive` and I couldn't tell what actually failed.

So let's switch to `Parse::try_parse_from`.

Errors went from:
```
test option_option ... ok
error: Found argument 'bar' which wasn't expected, or isn't valid in this context

USAGE:
    clap_derive [OPTIONS]

For more information try --help
error: test failed, to rerun pass '--test arg_enum'
```
To:
```
test option_option ... ok
test variant_with_defined_casing ... ok
test skip_variant ... ok
test default_value ... ok
test vector ... FAILED
test option_vector ... ok

failures:

---- vector stdout ----
thread 'vector' panicked at 'called `Result::unwrap()` on an `Err` value: Error { message: Formatted(Colorizer { use_stderr: true, color_when: Auto
, pieces: [("error:", Some(Red)), (" ", None), ("Found argument '", None), ("bar", Some(Yellow)), ("' which wasn't expected, or isn't valid in this
 context", None), ("\n\n", None), ("USAGE:\n    clap_derive [OPTIONS]", None), ("\n\nFor more information try ", None), ("--help", Some(Green)), ("
\n", None)] }), kind: UnknownArgument, info: ["bar"], source: None, backtrace: Backtrace }', clap_derive/tests/arg_enum.rs:388:56
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

failures:
    vector

test result: FAILED. 15 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

error: test failed, to rerun pass '--test arg_enum'
```
2021-10-30 10:00:34 -05:00
Ed Page
ca29e4760c chore(error): Remove unused backtrace warning
Technically, this also fixes a bug with an extra newline when building
with `debug` but that is a pretty minor cosmetic issue.  It is unclear
if `backtrace` has a trailing newline or not, so I left that as-is.
2021-10-30 09:26:37 -05:00
bors[bot]
b42e2baf59
Merge #2967
2967: fix(derive): Support WaitOnError for derive-genned errors r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-30 14:20:27 +00:00
Ed Page
21cc39678b fix(derive): Support WaitOnError for derive-genned errors
Before, `Error::exit` didn't provide `WaitOnError`, requiring each call
site to duplicate half of `Error::exit`s behavior to get it.  This
hadn't been done for errors raised by derive-generated code.  Ideally,
these errors never happen but all the same, having this consistent would
be good.

This moves knowledge of `WaitOnError` to `Error` (including through
`Error::format`) so `Error::exit` can wait.  Now all of the callers to
`.exit` get a consistent experience without duplication.

While #2938 made a lot of `Error` fields optional for less churn-heavy
modifications, I made this new field required to minimize the risk of an
raise site forgetting to set it.
2021-10-30 09:08:11 -05:00
bors[bot]
5132bbb031
Merge #2966
2966: Add new `App::mut_args` for mutating all arguments r=pksunkara a=repi



Co-authored-by: Johan Andersson <repi@repi.se>
Co-authored-by: Johan Andersson <johan@embark-studios.com>
2021-10-30 12:50:50 +00:00
Johan Andersson
477f884af1 Fix test to support env feature disabled 2021-10-30 14:28:52 +02:00
Johan Andersson
1c73c46af9 Add partial_mut_args test 2021-10-30 13:37:34 +02:00
Johan Andersson
3a9d40fcb8 Add no_auto_version_mut_args test 2021-10-30 13:01:13 +02:00
Johan Andersson
0dded91541
Fix docs variable name
Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
2021-10-30 12:55:46 +02:00
Johan Andersson
6e4ac4cffc Add App::mut_args 2021-10-30 12:26:15 +02:00
bors[bot]
2ce916133b
Merge #2961 #2965
2961: Pin the zola version used to deploy the site r=epage a=pksunkara



2965: fix(error): Never show unrequested color r=pksunkara a=epage



Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-29 23:00:12 +00:00
bors[bot]
98c5f78d3b
Merge #2964
2964: test(derive): Verify derive-genned errors are formatted r=pksunkara a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
2021-10-29 21:53:08 +00:00
Ed Page
6126f998d1 fix(error): Never show unrequested color
If the user prints a raw error, it may include color even if the user
turned it off at runtime.  Now we'll be more conservative and never show
color for raw errors.

This is a follow up to #2943; apparently I had missed some cases.
2021-10-29 16:28:23 -05:00