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
23KB
528 行
#[cfg_attrs { ... }]
提供了一种替代语法,用于 #[cfg_attr(...)]
,使其与文档注释更易于使用。
语法
CfgAttrsAttribute :
cfg_attrs
属性 :
ConfigureAttribute | OuterAttributeConfigureAttribute :
#
[
configure
(
ConfigureMeta)
]
ConfigureMeta :
ConfigurationPredicate,
AttributesAttributes :
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