Expand description
Document your crate’s feature flags.
This crates provides a macro that extracts “documentation” comments from Cargo.toml
To use this crate, add #![doc = document_features::document_features!()] in your crate documentation.
The document_features!() macro reads your Cargo.toml file, extracts feature comments and generates
a markdown string for your documentation.
Basic example:
//! Normal crate documentation goes here.
//!
//! ## Feature flags
#![doc = document_features::document_features!()]
// rest of the crate goes here.§Documentation format:
The documentation of your crate features goes into Cargo.toml, where they are defined.
The document_features!() macro analyzes the contents of Cargo.toml.
Similar to Rust’s documentation comments /// and //!, the macro understands
comments that start with ## and #! . Note the required trailing space.
Lines starting with ### will not be understood as doc comment.
## comments are meant to be above the feature they document.
There can be several ## comments, but they must always be followed by a
feature name or an optional dependency.
There should not be #! comments between the comment and the feature they document.
#! comments are not associated with a particular feature, and will be printed
in where they occur. Use them to group features, for example.
§Examples:
This contents in Cargo.toml:
[package]
name = "..."
# ...
[features]
default = ["foo"]
#! This comments goes on top
## The foo feature enables the `foo` functions
foo = []
## The bar feature enables the bar module
bar = []
#! ### Experimental features
#! The following features are experimental
## Enable the fusion reactor
##
## ⚠️ Can lead to explosions
fusion = []
[dependencies]
document-features = "0.2"
#! ### Optional dependencies
## Enable this feature to implement the trait for the types from the genial crate
genial = { version = "0.2", optional = true }
## This awesome dependency is specified in its own table
[dependencies.awesome]
version = "1.3.5"
optional = true
Generates the following:
| Preview |
|---|
|
This comments goes on top
§Experimental featuresThe following features are experimental
§Optional dependencies
|
§Customization
You can customize the formatting of the features in the generated documentation by setting
the key feature_label= to a given format string. This format string must be either
a string literal or
a raw string literal.
Every occurrence of {feature} inside the format string will be substituted with the name of the feature.
For instance, to emulate the HTML formatting used by rustdoc one can use the following:
#![doc = document_features::document_features!(feature_label = r#"<span class="stab portability"><code>{feature}</code></span>"#)]The default formatting is equivalent to:
#![doc = document_features::document_features!(feature_label = "**`{feature}`**")]§Compatibility
The minimum Rust version required to use this crate is Rust 1.56.
You can make this crate optional and use #[cfg_attr()] statements to enable it only when building the documentation:
You need to have two levels of cfg_attr because Rust < 1.54 doesn’t parse the attribute
otherwise.
#![cfg_attr(
feature = "document-features",
cfg_attr(doc, doc = ::document_features::document_features!())
)]In your Cargo.toml, enable this feature while generating the documentation on docs.rs:
[dependencies]
document-features = { version = "0.2", optional = true }
[package.metadata.docs.rs]
features = ["document-features"]
## Alternative: enable all features so they are all documented
## all-features = trueMacros§
- document_
features - Produce a literal string containing documentation extracted from Cargo.toml