Commit graph

2379 commits

Author SHA1 Message Date
Kevin K
564f63640c
Merge pull request #1227 from kbknapp/v3-dev
fix(Suggestions): disables suggestions when AllowExternalSubcommand i…
2018-03-21 00:05:21 -04:00
Aleksey Kladov
dfbae74e6d fix(Suggestions): disables suggestions when AllowExternalSubcommand is set 2018-03-21 00:01:23 -04:00
Kevin K
b73c7e8518
Merge pull request #1226 from kbknapp/v3-dev
V3 dev
2018-03-20 23:58:58 -04:00
Kevin K
a7b3a75cc4 api(Arg): adds Arg::raw as convenience method to indicate multiple, last, and allow_hyphen_values 2018-03-20 23:53:36 -04:00
Kevin K
d405cbf2e6 Add wasm support 2018-03-20 23:49:38 -04:00
Kevin K
875f6b884b
Merge pull request #1225 from kbknapp/v3-dev
V3 dev
2018-03-20 23:04:07 -04:00
Kevin K
f65e2e4bf5
fix(Indices): fixes Indices to work on v3 2018-03-20 23:03:09 -04:00
Kevin K
e2e15b79b7 feat(Arg Indices): adds the ability to query argument value indices
Adds the abiltiy to query the matches struct for the indices of values or flags. The index
is similar to that of an argv index, but not exactly a 1:1.

For flags (i.e. those arguments which don't have an associated value), indices refer
to occurrence of the switch, such as `-f`, or `--flag`. However, for options the indices
refer to the *values* `-o val` would therefore not represent two distinct indices, only the
index for `val` would be recorded. This is by design.

Besides the flag/option descrepancy, the primary difference between an argv index and clap
index, is that clap continues counting once all arguments have properly seperated, whereas
an argv index does not.

The examples should clear this up.

*NOTE:* If an argument is allowed multiple times, this method will only give the *first*
index.

The argv indices are listed in the comments below. See how they correspond to the clap
indices. Note that if it's not listed in a clap index, this is becuase it's not saved in
in an `ArgMatches` struct for querying.

```rust
let m = App::new("myapp")
    .arg(Arg::with_name("flag")
        .short("f"))
    .arg(Arg::with_name("option")
        .short("o")
        .takes_value(true))
    .get_matches_from(vec!["myapp", "-f", "-o", "val"]);
            // ARGV idices: ^0       ^1    ^2    ^3
            // clap idices:          ^1          ^3

assert_eq!(m.index_of("flag"), Some(1));
assert_eq!(m.index_of("option"), Some(3));
```

Now notice, if we use one of the other styles of options:

```rust
let m = App::new("myapp")
    .arg(Arg::with_name("flag")
        .short("f"))
    .arg(Arg::with_name("option")
        .short("o")
        .takes_value(true))
    .get_matches_from(vec!["myapp", "-f", "-o=val"]);
            // ARGV idices: ^0       ^1    ^2
            // clap idices:          ^1       ^3

assert_eq!(m.index_of("flag"), Some(1));
assert_eq!(m.index_of("option"), Some(3));
```

Things become much more complicated, or clear if we look at a more complex combination of
flags. Let's also throw in the final option style for good measure.

```rust
let m = App::new("myapp")
    .arg(Arg::with_name("flag")
        .short("f"))
    .arg(Arg::with_name("flag2")
        .short("F"))
    .arg(Arg::with_name("flag3")
        .short("z"))
    .arg(Arg::with_name("option")
        .short("o")
        .takes_value(true))
    .get_matches_from(vec!["myapp", "-fzF", "-oval"]);
            // ARGV idices: ^0      ^1       ^2
            // clap idices:         ^1,2,3    ^5
            //
            // clap sees the above as 'myapp -f -z -F -o val'
            //                         ^0    ^1 ^2 ^3 ^4 ^5
assert_eq!(m.index_of("flag"), Some(1));
assert_eq!(m.index_of("flag2"), Some(3));
assert_eq!(m.index_of("flag3"), Some(2));
assert_eq!(m.index_of("option"), Some(5));
```

One final combination of flags/options to see how they combine:

```rust
let m = App::new("myapp")
    .arg(Arg::with_name("flag")
        .short("f"))
    .arg(Arg::with_name("flag2")
        .short("F"))
    .arg(Arg::with_name("flag3")
        .short("z"))
    .arg(Arg::with_name("option")
        .short("o")
        .takes_value(true)
        .multiple(true))
    .get_matches_from(vec!["myapp", "-fzFoval"]);
            // ARGV idices: ^0       ^1
            // clap idices:          ^1,2,3^5
            //
            // clap sees the above as 'myapp -f -z -F -o val'
            //                         ^0    ^1 ^2 ^3 ^4 ^5
assert_eq!(m.index_of("flag"), Some(1));
assert_eq!(m.index_of("flag2"), Some(3));
assert_eq!(m.index_of("flag3"), Some(2));
assert_eq!(m.index_of("option"), Some(5));
```

The last part to mention is when values are sent in multiple groups with a [delimiter].

```rust
let m = App::new("myapp")
    .arg(Arg::with_name("option")
        .short("o")
        .takes_value(true)
        .multiple(true))
    .get_matches_from(vec!["myapp", "-o=val1,val2,val3"]);
            // ARGV idices: ^0       ^1
            // clap idices:             ^2   ^3   ^4
            //
            // clap sees the above as 'myapp -o val1 val2 val3'
            //                         ^0    ^1 ^2   ^3   ^4
assert_eq!(m.index_of("option"), Some(2));
```
2018-03-20 22:35:10 -04:00
Kevin K
ee5733fd0a fixup! docs(Arg Indices): adds the documentation for the arg index querying methods 2018-03-20 22:26:12 -04:00
Kevin K
89b74d5b31 fixup! tests: adds tests for querying indices 2018-03-20 22:25:58 -04:00
Kevin K
ad51b79300 docs(Values): improves the docs example of the Values iterator 2018-03-20 22:25:39 -04:00
Kevin K
ed96928eda feat(Indices): implements an Indices<Item=&usize> iterator 2018-03-20 22:25:32 -04:00
Kevin K
c3cd1c1a43 tests(Values): moves values tests into a tests mod 2018-03-20 22:25:23 -04:00
Kevin K
b59da93693 docs(Arg Indices): adds the documentation for the arg index querying methods 2018-03-20 22:25:17 -04:00
Kevin K
ed8bcc7632 tests: adds tests for querying indices 2018-03-20 22:25:10 -04:00
Kevin K
a2c2bb4991
Merge pull request #1223 from kbknapp/v3-dev
V3 dev
2018-03-20 21:01:29 -04:00
Kevin K
7b544e00d9 tests(AllowMissingPositional): adds tests for new 'skipping to last positional' with '--' 2018-03-20 20:57:14 -04:00
Kevin K
219b96b672 imp(AllowMissingPositional): improves the ability of AllowMissingPositional to allow 'skipping' to the last positional arg with '--' 2018-03-20 20:54:26 -04:00
Kevin K
59687be81f
Merge pull request #1218 from kbknapp/v3-dev
backporting 2.x fixes and features
2018-03-19 17:13:13 -04:00
Kevin K
91e275c609
Use short help as tooltip in PowerShell completion
Also fixed some small issues with subcommand detection.
2018-03-19 17:12:10 -04:00
Kevin K
bd5143d1f8
fish: Fix completion of >1 options 2018-03-19 17:12:06 -04:00
Matthias Krüger
1e3c715c47
Cargo.toml: use codegen-units = 1 in release and bench profiles. 2018-03-19 17:12:02 -04:00
Kevin K
92eab59dfc
docs: Fix some typos and markdown issues. 2018-03-19 17:11:59 -04:00
Katharina
919fd32dfb
Moving the line into the apropriate section 2018-03-19 17:11:57 -04:00
andy boot
a4d080370c fix typo 2018-03-19 16:48:01 -04:00
Kevin K
b74faf921d
Merge pull request #1217 from kbknapp/v3-dev
refactor(Arg): reverts some of the v3 deprecations to ease the upgrade process
2018-03-19 16:36:18 -04:00
Kevin K
82ffb821de
refactor(Arg): reverts some of the v3 deprecations to ease the upgrade process 2018-03-19 16:33:56 -04:00
William Murphy
b9e4c058fa
Merge pull request #1208 from willmurphyscode/args-first-in-help
Print ARGS immediately after usage in help
2018-03-15 18:15:35 -04:00
Will Murphy
742aec292c Print ARGS after usage in help
For version 3, we want the args section to immediately follow
the usage section in the default help message.

One change that I am unhappy with is needing to make "write_arg"
in app/help.rs accept an extra param that makes it suppress the
extra line. This is to prevent an extra blank line from appearing
between args and options in the default help, and seems necessary,
but there might be a better way.
2018-03-11 20:33:13 -04:00
Kevin K
c3cfe8f7a4
Merge pull request #1202 from willmurphyscode/version-bump-term-size
bump version on term size to 1.0.0-beta1
2018-03-06 07:28:25 -05:00
Will Murphy
74421bb8b7 bump version on term size to 1.0.0-beta1 2018-03-06 06:36:59 -05:00
Kevin K
1567d80885
Merge pull request #1198 from willmurphyscode/port-1161-fix-to-v3
Port 1161 fix to v3
2018-03-04 16:55:18 -05:00
Will Murphy
23a48ea03a vec_map must be optional
This adds a keys method to the internal implementation of vec_map and
adds conditional compilation in the parser to make the parser compile
with or without the vec_map dependency.
2018-03-04 15:50:35 -05:00
Will Murphy
3401e6a3ec clean up whitespace 2018-03-01 06:55:24 -05:00
Will Murphy
5ea7eab427 Port 1161 fix to v3
Copy the fix from https://github.com/kbknapp/clap-rs/pull/1162 into
the v3 parser, and add a test to protect against regressions in the
expected behavior of example 22.
2018-03-01 06:52:30 -05:00
Kevin K
bd08e73e54
Merge pull request #1182 from kbknapp/v3-dev
V3 dev
2018-02-14 13:41:39 -05:00
Kevin K
e0b891d784
style: removes unused imports 2018-02-13 15:47:31 -05:00
Kevin K
6971624428
imp(Deps): doesnt compile ansi_term on Windows since its not used
Before this commit, ansi_term was compiled anytime the `color` feature
was used. However, on Windows the `color` feature is ignored. Even so
ansi_term was compiled, and just not used. This commit fixes that by
only compiling ansi_term on non-Windows targets. Thanks to @retep998 for
the gudiance.

Closes #1155
2018-02-13 15:43:45 -05:00
Kevin K
cdfdbfffb5
tests(Bash Completions): updates the bash completions to the new file completion fallback 2018-02-13 15:42:48 -05:00
Kevin K
79a210472c
imp(Bash Completions): instead of completing a generic option name, all bash completions fall back to file completions UNLESS Arg::possible_values was used 2018-02-13 15:42:47 -05:00
Kevin K
14a2dadc31
Merge pull request #1177 from kbknapp/v3-dev
V3 dev
2018-02-12 14:56:59 -05:00
Kevin K
08dfdc877b
style: changes values->possible values in help messages as well as errors 2018-02-12 14:52:29 -05:00
etopiei
973022184e
Tests pass now 2018-02-12 14:39:55 -05:00
etopiei
5220122f72
Adjusted error message, as specified in Issue #1160 2018-02-12 14:39:51 -05:00
Kevin K
e630a848d2
Merge pull request #1172 from kbknapp/v3-dev
V3 dev
2018-02-10 15:45:43 -05:00
Kevin K
dc098e19a2
tests(AllArgsOverrideSelf): adds tests for AllArgsOverrideSelf 2018-02-10 15:43:39 -05:00
Kevin K
7c23bee6b8
setting(AllArgsOverrideSelf): adds a convenience setting to say all args override themselves 2018-02-10 15:42:44 -05:00
Kevin K
da1ede55f5
Merge pull request #1171 from kbknapp/v3-dev
V3 dev
2018-02-09 23:42:48 -05:00
Kevin K
e1d1c06d45
chore: updates version sync in readme 2018-02-09 23:40:55 -05:00
Kevin K
237c2bdff4
tests(Self Overrides): adds tests for args that override themselves 2018-02-09 23:35:14 -05:00