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

如何为特性门控的派生 trait 生成文档?

问题

我可以使用cfg_attr属性为类型有条件地派生Trait实现,比如下面的结构体MyStruct始终实现Clone、Copy和Debug,仅在启用my-feature特性时才实现PartialEq:

#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "my-feature", derive(PartialEq))]
struct MyStruct;

但我希望rustdoc生成的文档能明确说明MyStruct当且仅当启用my-feature特性时才实现PartialEq,目前只能得到两种不理想的结果:

  • 启用my-feature编译文档时,仅显示PartialEq实现,未标注特性门控;
  • 未启用my-feature编译文档时,完全不显示MyStruct可实现PartialEq的信息。
解决方案

要让文档清晰体现特性门控的Trait实现,可通过两种方式结合实现:

1. 在结构体文档注释中明确说明

直接在结构体的文档注释里标注哪些Trait依赖特性,不管特性是否启用,用户都能在文档中看到这个说明:

#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "my-feature", derive(PartialEq))]
/// 示例结构体
///
/// ### 已实现的Trait
/// - 始终可用:`Clone`、`Copy`、`Debug`
/// - **仅当启用`my-feature`特性时可用**:`PartialEq`
struct MyStruct;

2. 使用#[doc(cfg(...))]标注Trait实现

Rust提供的#[doc(cfg(feature = "my-feature"))]属性可以让rustdoc在文档中明确标注该Trait实现依赖的特性,无论特性是否启用,都会显示这个门控说明。

方式一:配合cfg_attr给派生的Trait添加标注

直接给cfg_attr追加doc属性,让派生的PartialEq实现带上特性标注:

#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "my-feature", derive(PartialEq))]
#[cfg_attr(feature = "my-feature", doc(cfg(feature = "my-feature")))]
/// 示例结构体
///
/// ### 已实现的Trait
/// - 始终可用:`Clone`、`Copy`、`Debug`
/// - **仅当启用`my-feature`特性时可用**:`PartialEq`
struct MyStruct;

方式二:手动实现Trait并添加标注

如果需要更灵活的控制,可以手动写出PartialEq的实现,然后给实现块加上#[doc(cfg(...))]:

#[derive(Clone, Copy, Debug)]
/// 示例结构体
///
/// ### 已实现的Trait
/// - 始终可用:`Clone`、`Copy`、`Debug`
/// - **仅当启用`my-feature`特性时可用**:`PartialEq`
struct MyStruct;

#[cfg(feature = "my-feature")]
#[doc(cfg(feature = "my-feature"))]
impl PartialEq for MyStruct {
    fn eq(&self, other: &Self) -> bool {
        // 根据需求实现逻辑
        true
    }
}

这样处理后:

  • 启用my-feature时,文档会显示PartialEq实现,并标注“仅在my-feature特性下可用”;
  • 未启用my-feature时,文档仍会显示PartialEq的条目,并明确说明它依赖my-feature特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:21:00