🦀
ライブラリクレートでは`doc_cfg`や`doc_auto_cfg`を有効にするのがおすすめ
rustdocでdoc_cfg
機能やdoc_auto_cfg
機能を有効にすると、条件付きコンパイルに関する情報をrustdoc
に伝えることができます。
これらの機能を有効にすると、以下のようにそのアイテムが特定のfeatureフラグが有効な場合や特定のプラットフォームでのみ利用可能なことを説明するバナーを表示できます。
unix
モジュールはUnix環境でのみ利用可能
now
メソッドはstd
フラグが有効な場合のみ利用可能
設定方法
これらの機能はまだ不安定なのでcfg_attr
を使ってdocsrs
が定義されている場合にのみ機能を有効にします。
src/lib.rs
#![cfg_attr(docsrs, feature(doc_cfg))]
// または
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
doc_cfg
機能が有効な場合にunix
モジュールにバナーを表示するには以下のようにします。
src/lib.rs
#[cfg(unix)]
#[cfg_attr(docsrs, doc(cfg(unix)))]
pub use crate::platform::unix;
doc_auto_cfg
機能が有効な場合にnow
メソッドにバナーを表示するには以下のようにします。
src/lib.rs
#[cfg(feature = "std")]
pub fn now() -> Self {
...
}
doc_auto_cfg
機能はdoc_cfg
機能を拡張した機能で、doc(cfg(...))
を追加しなくても自動的にバナーを表示できます。
多くの場合はこれらの機能は機能しますが、以下のようにcfg_attr
を使用して特定のfeatureフラグが有効な場合にのみトレイトを導出する場合は現時点ではバナーは表示されません。
src/lib.rs
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
pub struct Params {
...
}
docs.rsでバナーを表示する
docs.rsでバナーを表示するには以下のようにします。
Cargo.toml
[package.metadata.docs.rs]
# 全てのfeatureフラグを有効にできない場合は適宜変更する
all-features = true
# `cfg`が`docsrs`の場合は不要
rustdoc-args = ["--cfg", "docsrs"]
docs.rsでは既定のcfg
としてdocsrs
が定義されるので、cfg
がdocsrs
の場合はrustdoc-args
は不要です。
ローカル環境でバナーを表示する
ローカル環境でバナーを表示するには以下のようにRUSTDOCFLAGS
環境変数に--cfg cfg
を設定してcargo doc
を実行します。
env RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features
Discussion