clap/examples/git-derive.md
Ed Page 389ff4ff21 fix(help): Subcommand display order respects Command::next_display_order
Previous behavior:
- They'd be sorted by default
- They'd derive display order if `DeriveDisplayOrder` was set
  - This could be set recursively
- The initial display order value for subcommands was 0

New behavior:
- Sorted order is derived by default
- Sorting is turned on by `cmd.next_display_order(None)`
  - This is not recursive, it must be set on each level
- The display order incrementing is mixed with arguments
  - This does make it slightly more difficult to predict
2022-07-22 15:03:16 -05:00

138 lines
2.3 KiB
Markdown

**This requires enabling the [`derive` feature flag][crate::_features].**
Git is an example of several common subcommand patterns.
Help:
```console
$ git-derive
? failed
git
A fictional versioning CLI
USAGE:
git-derive[EXE] <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
SUBCOMMANDS:
clone Clones repos
push pushes things
add adds things
stash
help Print this message or the help of the given subcommand(s)
$ git-derive help
git
A fictional versioning CLI
USAGE:
git-derive[EXE] <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
SUBCOMMANDS:
clone Clones repos
push pushes things
add adds things
stash
help Print this message or the help of the given subcommand(s)
$ git-derive help add
git-add
adds things
USAGE:
git-derive[EXE] add <PATH>...
ARGS:
<PATH>... Stuff to add
OPTIONS:
-h, --help Print help information
```
A basic argument:
```console
$ git-derive add
? failed
git-add
adds things
USAGE:
git-derive[EXE] add <PATH>...
ARGS:
<PATH>... Stuff to add
OPTIONS:
-h, --help Print help information
$ git-derive add Cargo.toml Cargo.lock
Adding ["Cargo.toml", "Cargo.lock"]
```
Default subcommand:
```console
$ git-derive stash -h
git-stash
USAGE:
git-derive[EXE] stash [OPTIONS]
git-derive[EXE] stash <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
-m, --message <MESSAGE>
SUBCOMMANDS:
push
pop
apply
help Print this message or the help of the given subcommand(s)
$ git-derive stash push -h
git-stash-push
USAGE:
git-derive[EXE] stash push [OPTIONS]
OPTIONS:
-h, --help Print help information
-m, --message <MESSAGE>
$ git-derive stash pop -h
git-stash-pop
USAGE:
git-derive[EXE] stash pop [STASH]
ARGS:
<STASH>
OPTIONS:
-h, --help Print help information
$ git-derive stash -m "Prototype"
Pushing StashPush { message: Some("Prototype") }
$ git-derive stash pop
Popping None
$ git-derive stash push -m "Prototype"
Pushing StashPush { message: Some("Prototype") }
$ git-derive stash pop
Popping None
```
External subcommands:
```console
$ git-derive custom-tool arg1 --foo bar
Calling out to "custom-tool" with ["arg1", "--foo", "bar"]
```