#conditional-compilation #syntax #boolean #cfg #attributes #expression #rather

efg

使用布尔表达式语法进行条件编译,而不是使用 any()、all()、not()。

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

MIT/Apache

20KB
329

条件编译表达式

github crates.io docs.rs build status

使用布尔表达式语法进行条件编译,而不是使用 any()all()not()

[dependencies]
efg = "0.1"

摘要

Rust的cfgcfg_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.0MIT许可证
除非您明确声明,否则您提交给此crate的任何有意包含的贡献,根据Apache-2.0许可证定义,应按照上述方式双重许可,不附加任何其他条款或条件。

无运行时依赖