# clap-documentation
Automatically generate Markdown or AsciiDoc documentation for
[`clap`](https://crates.io/crates/clap) command-line tools.
## Examples
Generate Markdown text for a basic `clap` app:
```rust
#[derive(clap::Parser)]
struct Cli {
#[arg()]
name: String,
}
let markdown: String = clap_documentation::help_markdown::<Cli>();
```
Generate AsciiDoc text for a basic `clap` app:
```rust
#[derive(clap::Parser)]
struct Cli {
#[arg()]
name: String,
}
let asciidoc: String = clap_documentation::help_asciidoc::<Cli>();
```
**Generated Examples:**
See `clap` example programs and the corresponding documentation generated by
`clap-documentation`:
| [`./complex_app.rs`](./docs/examples/complex_app.rs) | [complex-app.md](./docs/examples/complex-app.md) | [complex-app.adoc](./docs/examples/complex-app.adoc) |
### Usage Convention
This section describes a suggested convention for using `clap-documentation` to
generate a `CommandLineHelp.md` or `CommandLineHelp.adoc` file, which can be
committed to source control and viewed as online documentation.
1. Add hidden `--markdown-help` and/or `--asciidoc-help` options to your `clap` application:
```rust
use clap::Parser;
#[derive(Parser)]
struct Cli {
#[arg(long, hide = true)]
markdown_help: bool,
#[arg(long, hide = true)]
asciidoc_help: bool,
}
fn main() {
let args = Cli::parse();
if args.markdown_help {
clap_documentation::print_help_markdown::<Cli>();
}
if args.asciidoc_help {
clap_documentation::print_help_asciidoc::<Cli>();
}
}
```
2. Invoke the option to generate a documentation file:
```shell
$ cargo run -- --markdown-help > docs/CommandLineHelp.md
$ cargo run -- --asciidoc-help > docs/CommandLineHelp.adoc
```
3. Save the file in git, and link to it from the project's README.md
or other relevant documentation.
## License
Licensed under either of
* Apache License, Version 2.0
([LICENSE-APACHE](./LICENSE-APACHE) or <http://www.apache.org/licenses/LICENSE-2.0>)
* MIT license
([LICENSE-MIT](./LICENSE-MIT) or <http://opensource.org/licenses/MIT>)
at your option.
## Contributing
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.
See [**Development.md**](./docs/Development.md) for instructions on how to
perform common development tasks.