Cargo command to create your README from your crate’s documentation.
You can install cargo rdme with cargo by running cargo install cargo-rdme
.
Cargo rdme will insert your crate’s documentation in your README file. To control where the
documentation will be inserted you need to insert a marker: <!-- cargo-rdme -->
. For example,
you can start your README with some glorious badges and follow up with the rustdoc
documentation:
```
After running cargo rdme
you will find your README to be something like:
```
Whenever change your crate’s documentation you just need to run cargo rdme
to update your
README file.
The documentation of your crate doesn’t always map directly to a good README. For example, rust code blocks can have hidden lines. Those should not be shown in the README file.
This section covers the transformation cargo rdme automatically apply to generate a better README.
Rust code block are transformed in two ways by cargo rdme:
#
will be omitted, just like in rustdoc
.rust
markdown tag so it gets proper syntax
highlighting. We also remove tags that only concern rustdoc
such as should_panic
.In the table below you can see an example of these modification. The code block now is
tagged with rust
and hidden lines were removed:
```rust //! To check if a number is prime do: //! //! ``` //! # fn main() { //! for i in 2.. { //! if is_prime(i) { //! println!("{i}"); //! } //! } //! # } //! ``` ``` | ````markdown To check if a number is prime do: ```rust for i in 2.. { if is_prime(i) { println!("{i}"); } } ``` ```` |
Rust documentation can contain links to items defined in the crate. This links would not make sense in your README file, so cargo rdme automatically generate links to docs.rs for these intralinks.
Currently we only support links of the form [⋯](crate::⋯)
, so be sure to use that format.
Links to the standard library are also supported, and they must be of the form
[⋯](::<crate>::⋯)
, where <crate>
is a crate that is part of the standard library, such as
std
, core
, or alloc
.
Take a look at the example below:
```rust //! To check if a number is prime use //! [`is_prime`](crate::is_prime). ``` | ```markdown To check if a number is prime use [`is_prime`](https://docs.rs/prime/latest/prime/fn.is_prime.html). ``` |
Note that there is some limitations in intralink support. This is a complex feature: cargo rdme
needs to do some work to be able to create the link to docs.rs. This is because the link
includes the kind of item the intralink points to, in the case of is_prime
we need to discover
that is a function to generate a link that ends in fn.is_prime.html
. Therefore, intralink
support should be considered "best effort" (for instance, don’t expect items generated by macros
to be resolved). If cargo rdme is unable to generate the link it will still generate the README
file, but a warning will be emitted.
If the default behavior of cargo rdme
is not appropriate for your project you can crate a
configuration file .cargo-rdme.toml
in the root of your project. This is how that
configuration file can look like:
```toml
Cargo.toml
.readme-path = "MY-README.md"
line-terminator = "lf"
readme-path
to createworkspace-project = "subproject"
src/lib.rs
. You can change that in the entrypoint
table.[entrypoint]
type = "bin"
src/main.rs
. If you have binary targetsbin-name
.bin-name = "my-bin-name"
[intralinks]
https://docs.rs
.docs-rs-base-url = "https://mydocs.rs"
latest
.docs-rs-version = "1.0.0"
strip-links = false ```
These setting can be overridden with command line flags. Run cargo rdme --help
for more
information.
To verify that your README is up to date with your crate’s documentation you can run
cargo rdme --check
. The exit code will be 0
if the README is up to date, 3
if it’s
not, or 4
if there were warnings.
If you use GitHub Actions you can add this step to verify if the README is up to date:
yaml
- name: Check if the README is up to date.
run: |
cargo install cargo-rdme
cargo rdme --check