5个版本
0.1.4 | 2022年12月18日 |
---|---|
0.1.3 | 2022年12月18日 |
0.1.2 | 2021年12月7日 |
0.1.1 | 2021年12月6日 |
0.1.0 | 2021年12月6日 |
#14 in #rather
20KB
329 行
条件编译表达式
使用布尔表达式语法进行条件编译,而不是使用 any()、all()、not()。
[dependencies]
efg = "0.1"
摘要
Rust的cfg
和cfg_attr
条件编译属性使用一个受限的领域特定语言来指定配置谓词。语法在Rust参考的“条件编译”页面中描述。这种语法而不是普通布尔表达式的理由是为了适应旧版本rustc对属性语法的限制。
但是,在Rust 1.18.0中,通过rust-lang/rust#40346取消了属性语法的所有限制。这个crate探索使用普通布尔表达式实现条件编译:&&
、||
、!
,如Rust语法中通常使用。
内置到rustc中 | 这个crate |
---|---|
#[cfg(any(thing1, thing2, …))] | #[efg(thing1 || thing2 || …)] |
#[cfg(all(thing1, thing2, …))] | #[efg(thing1 && thing2 && …)] |
#[cfg(not(thing))] | #[efg(!thing)] |
示例
来自quote
crate的真实世界示例
#[efg(feature "proc-macro" && !(target_arch "wasm32" && target_os "unknown"))]
extern crate proc_macro;
和来自proc-macro2
crate
#[efg(super_unstable || feature "span-locations")]
pub fn start(&self) -> LineColumn {
许可证
根据您的选择,许可协议为Apache License, Version 2.0或MIT许可证。除非您明确声明,否则您提交给此crate的任何有意包含的贡献,根据Apache-2.0许可证定义,应按照上述方式双重许可,不附加任何其他条款或条件。