#macro-rules #clean #internal #hide #impl #docs #macro-export

clean-macro-docs

在记录 macro_rules! 宏时隐藏内部规则

3个稳定版本

1.0.2 2021年2月18日
1.0.1 2021年2月17日

#30 in #hide

Download history 15/week @ 2024-03-24 41/week @ 2024-03-31 1/week @ 2024-04-07 2/week @ 2024-04-21 19/week @ 2024-05-05 34/week @ 2024-05-12 2/week @ 2024-05-19 21/week @ 2024-05-26 5/week @ 2024-06-02 21/week @ 2024-06-09 76/week @ 2024-06-16 17/week @ 2024-06-23 19/week @ 2024-06-30 15/week @ 2024-07-07

每月下载量 127次
用于 comprende

MIT 许可证

28KB
604

macro_rules! 文档中隐藏内部规则

当生成 macro_rules! 宏的文档时,rustdoc 将包括每个规则,包括仅应在您的宏内部调用的内部规则。 clean_docs 属性将隐藏您的内部规则。

示例

#[macro_export]
macro_rules! messy {
    (@impl $e:expr) => {
        format!("{}", $e)
    };
    ($e:expr) => {
        messy!(@impl $e)
    };
}

#[clean_docs]
#[macro_export]
macro_rules! clean {
    (@impl $e:expr) => {
        format!("{}", $e)
    };
    ($e:expr) => {
        clean!(@impl $e)
    };
}

将记录为

macro_rules! messy {
    (@impl $e:expr) => { ... };
    ($e:expr) => { ... };
}

macro_rules! clean {
    ($e:expr) => { ... };
}

它是如何工作的?

上面的 clean! 宏被转换为

#[macro_export]
macro_rules! clean {
    ($e:expr) => {
        $crate::__clean!(@impl $e)
    };
}

#[macro_export]
macro_rules! __clean {
    (@impl $e:expr) => {
        format!("{}", $e)
    };
}

macro_rules! clean {
    (@impl $e:expr) => {
        format!("{}", $e)
    };
    ($e:expr) => {
        clean!(@impl $e)
    };
}

最后一个非 macro_export 宏存在,因为Rust不允许通过绝对路径调用宏展开的宏(即 $crate::__clean)。

解决方案是使用不带绝对路径的本地版本来遮蔽 macro_export 宏。

参数

您可以使用这些可选参数来配置 clean_macro

#[clean_docs(impl = "#internal", internal = "__internal_mac")]

impl

表示内部规则开头“标志”的字符串。默认为 "@"

#[clean_docs(impl = "#internal")]
#[macro_export]
macro_rules! mac {
    (#internal $e:expr) => {
        format!("{}", $e)
    };
    ($e:expr) => {
        mac!(#internal $e)
    };
}

internal

表示用于您的宏内部版本的标识符的字符串。默认情况下,clean_docs 将两个下划线 __ 预先添加到主宏的标识符。

#[clean_docs(internal = "__internal_mac")]
#[macro_export]
macro_rules! mac {
    (@impl $e:expr) => {
        format!("{}", $e)
    };
    ($e:expr) => {
        mac!(@impl $e)
    };
}

依赖项

~1.5MB
~35K SLoC