#docs #cfg-attr #attributes #comments

cfg_attrs

#[cfg_attr(...)] 的替代方案,与文档注释更易于使用

8 个稳定版本

3.0.0 2023年12月3日
2.1.2 2023年12月2日
2.0.0 2023年12月2日
1.0.2 2023年11月19日

过程宏 中排名第918


用于 generational-arena-tree

MPL-2.0 许可证

23KB
528

#[cfg_attrs { ... }]

提供了一种替代语法,用于 #[cfg_attr(...)],使其与文档注释更易于使用。

语法
CfgAttrsAttribute :
  cfg_attrs

属性 :
  ConfigureAttribute | OuterAttribute

ConfigureAttribute :
   # [ configure ( ConfigureMeta ) ]

ConfigureMeta :
   ConfigurationPredicate , Attributes

Attributes :
  Attribute* ( , Attribute* )* ,?

用法

在项目上放置 #[cfg_attrs] 将启用一个 #[configure(<condition>, <attributes>)] 辅助属性,以便在该项目上使用。

#[configure(...)] 属性的语法类似于 #[cfg_attr(...)],但配置属性使用完整的属性语法。这种方法的优点是,文档注释,扩展为 #[doc = "..."] 属性,可以在 #[configure(...)] 语法中使用。

示例

#[cfg_attrs]
/// This is an example struct.
#[configure(
    debug_assertions,
    ///
    /// Hello! These are docs that only appear when
    /// debug assertions are active.
)]
enum Example {
    #[configure(
        feature = "magic",
        /// Woah! Look at that! It enables
        /// `#[configure(...)]` for variants too!
    )]
    Point {
        #[configure(
            feature = "magic",
            /// And fields! This is amazing!
        )]
        x: i32,
        y: i32,
    },
}

这将展开为以下 #[cfg_attr(...)] 的用法

/// This is an example enum.
#[cfg_attr(
    debug_assertions,
    doc = "",
    doc = " Hello! These are docs that only appear when",
    doc = " debug assertions are active."
)]
enum Example {
    #[cfg_attr(
        feature = "magic",
        doc = " Woah! Look at that! It enables",
        doc = " `#[configure(...)]` for variants too!"
    )]
    Point {
        #[cfg_attr(
            feature = "magic",
            doc = " And fields! This is amazing!"
        )]
        x: i32,
        y: i32,
    },
}

如果调试断言处于活动状态,则会被展开为

/// This is an example enum.
///
/// Hello! These are docs that only appear when
/// debug assertions are active.
enum Example {
    Point {
        x: i32,
        y: i32,
    },
}

或者,如果启用了 magic 功能

/// This is an example enum.
enum Example {
    /// Woah! Look at that! It enables
    /// `#[configure(...)]` for variants too!
    Point {
        /// And fields! This is amazing!
        x: i32,
        y: i32,
    },
}

#[cfg_attrs(...)] 也可以与除文档注释之外的属性一起使用,尽管这样做没有实际的好处

#[cfg_attrs]
#[configure(
    feature = "magic",
    #[sparkles]
    #[crackles]
)]
fn bewitched() {}

以下示例展开为

#[cfg_attr(feature = "magic", sparkles, crackles)]
fn bewitched() {}

并且如果启用了 magic 功能,则会展开为

#[sparkles]
#[crackles]
fn bewitched() {}

依赖关系

~275–720KB
~17K SLoC