Macros 有没有办法对文档隐藏宏模式?

Macros 有没有办法对文档隐藏宏模式?,macros,rust,rust-cargo,rustdoc,Macros,Rust,Rust Cargo,Rustdoc,从Rust 1.6.0开始,生成的文档隐藏了每个宏模式的实现: 有没有办法从货物生成的文档中隐藏一些模式 macro_rules! mc { // hide this entire pattern (@impl, $arg:expr) => { 42 + $arg }; // but not this one ($arg:expr) => { mc!(@impl, $arg) }; } 我想这是最佳解决方案: /// Not meant to be

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

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

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

我想这是最佳解决方案:

/// 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) );
}

这使用了一个单独的
隐藏的
宏(可能需要公开),但它不是文档的一部分。所有应该隐藏的规则都将被隐藏,公共规则将在文档中的
public
宏中可见。

一个选项是使用一个只包含公共臂的伪宏,并使用属性选择rustdoc看到的规则:

///做一件事
///
/// ```
///#外部板条箱我的板条箱;
///#使用我的板条箱::mc;
///断言!(mc!(58),100);
/// ```
#[cfg(doc)]
#[宏_导出]
宏规则!司仪{
($arg:expr)=>{…};
}
#[cfg(非(doc))]
#[宏_导出]
宏规则!司仪{
(@impl,$arg:expr)=>{42+$arg};
($arg:expr)=>{mc!(@impl,$arg)};
}

注意:这仅在您不在内部使用宏的情况下才有效。

注意,如果用户显式导入宏(
[macro\u use(public)]extern-clater…
),它们将收到错误,并且还需要包含
隐藏的
[macro\u use(public,hidden)]extern板条箱…
。我编写了一个属性宏来自动处理此问题: