12

从 Rust 1.6.0 开始,生成的文档隐藏了每个宏模式的实现:

宏实现隐藏

有没有办法从 Cargo 生成的文档中隐藏一些模式?

macro_rules! mc {
    // hide this entire pattern
    (@impl, $arg:expr) => { 42 + $arg };
    // but not this one
    ($arg:expr) => { mc!(@impl, $arg) };
}
4

2 回答 2

9

我想这是最佳解决方案:

/// 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作为文档一部分的宏中可见。

于 2016-02-21T20:29:11.177 回答
1

一种选择是有一个只有公共武器的虚拟宏,并使用属性来选择一个 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) };
}

注意:这仅在您不在内部使用宏时才有效。

于 2021-02-09T22:00:09.160 回答