Expand description
Conditional compilation using boolean expression syntax, rather than any(), all(), not().
Rust’s cfg and cfg_attr conditional compilation attributes use a
restrictive domain-specific language for specifying configuration
predicates. The syntax is described in the Conditional compilation page
of the Rust reference. The reason for this syntax as opposed to ordinary
boolean expressions was to accommodate restrictions that old versions of
rustc used to have on the grammar of attributes.
However, all restrictions on the attribute grammar were lifted in Rust
1.18.0 by rust-lang/rust#40346. This crate explores implementing
conditional compilation using ordinary boolean expressions
instead: &&, ||, ! as usual in Rust syntax.
#[cfg(any(thing1, thing2, …))] | #[efg(thing1 || thing2 || …)] |
#[cfg(all(thing1, thing2, …))] | #[efg(thing1 && thing2 && …)] |
#[cfg(not(thing))] | #[efg(!thing)] |
§Examples
A real-world example from the quote crate:
#[efg(feature "proc-macro" && !(target_arch "wasm32" && target_os "unknown"))]
extern crate proc_macro;and from the proc-macro2 crate:
#[efg(super_unstable || feature "span-locations")]
pub fn start(&self) -> LineColumn {