/// Not meant to be called directly
#[doc(hidden)]
#[macro_export]
macro_rules! hidden {
( $hidden_rule1:expr ) => { ... };
( $hidden_rule2:expr ) => { ... };
...
}
#[macro_export]
macro_rules! public {
( $public:expr ) => ( hidden!($public) );
}
这里使用了一个单独的hidden
宏(可能需要公开),但它并不是文档的一部分。所有应该隐藏的规则都将被隐藏,而公开的规则将在public
宏中显示,该宏是文档的一部分。
一种选择是创建一个只包含公共函数的虚拟宏,并使用属性来选择rustdoc可以看到哪个函数:
/// Do a thing
///
/// ```
/// # extern crate my_crate;
/// # use my_crate::mc;
/// assert_eq!(mc!(58), 100);
/// ```
#[cfg(doc)]
#[macro_export]
macro_rules! mc {
($arg:expr) => { ... };
}
#[cfg(not(doc))]
#[macro_export]
macro_rules! mc {
(@impl, $arg:expr) => { 42 + $arg };
($arg:expr) => { mc!(@impl, $arg) };
}
#[macro_use(public)] extern crate ...
),他们将会收到一个错误,并且还需要包含hidden
:#[macro_use(public, hidden)] extern crate...
。 - Mike