You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何隐藏lazy_static crate生成的Statics与Functions不被cargo doc收录?

解决lazy_static生成的锁相关结构在cargo doc里乱显示的问题

为啥会出现这问题

lazy_static宏会自动生成带锁标记的辅助结构体(比如带LAZY后缀的类型)、静态变量和关联函数,这些默认会被cargo doc收录显示,导致文档冗余。直接在lazy_static!宏外层加#[doc(hidden)]没用,编译器会提示“unused attribute doc”——因为这个属性得作用在具体项上,不能直接套在宏本身。

管用的解决办法

办法1:给每个静态变量单独加#[doc(hidden)]

别把属性套在宏外层,直接加在宏内部的每个静态项上:

lazy_static! {
    #[doc(hidden)]
    static ref RE_EMAIL: Regex = Regex::new(r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$").unwrap();
    
    #[doc(hidden)]
    static ref RE_PHONE: Regex = Regex::new(r"^\d{11}$").unwrap();
}

这么写后,cargo doc会隐藏这些静态变量,以及lazy_static为它们生成的所有辅助结构体、函数。

办法2:用lazy_static自带的#[lazy_static(doc_hidden)]属性(推荐)

lazy_static本身提供了专门控制文档隐藏的属性,在宏内部的静态项上加#[lazy_static(doc_hidden)],能精准隐藏宏生成的辅助代码。无论是只藏辅助项、保留静态变量文档,还是连变量一起隐藏,都能用这个方式:

lazy_static! {
    // 保留静态变量文档,仅隐藏锁相关辅助结构
    #[lazy_static(doc_hidden)]
    /// 匹配邮箱的正则表达式
    static ref RE_EMAIL: Regex = Regex::new(r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$").unwrap();
    
    // 静态变量带辅助结构一起隐藏
    #[lazy_static(doc_hidden)]
    #[doc(hidden)]
    static ref RE_PHONE: Regex = Regex::new(r"^\d{11}$").unwrap();
}

办法3:把lazy_static代码放进私有模块

如果这些静态变量不需要对外暴露,直接扔私有模块里即可——私有模块的内容默认不会出现在cargo doc的公共文档中:

mod private {
    use lazy_static::lazy_static;
    use regex::Regex;
    
    lazy_static! {
        pub static ref RE_EMAIL: Regex = Regex::new(r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$").unwrap();
        pub static ref RE_PHONE: Regex = Regex::new(r"^\d{11}$").unwrap();
    }
}

// 对外暴露时直接引用私有模块内容,文档只会显示你指定的接口
pub use private::*;

验证方式

执行cargo doc --open重新生成文档,检查那些自动生成的锁相关结构是否已被隐藏。

内容的提问来源于stack exchange,提问作者Fabio Matos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:03:10