Crate efg

Crate efg 

Source
Expand description

githubcrates-iodocs-rs


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.

built into rustc
this crate
#[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 {

Attribute Macros§

efg
efg_attr