#macro #proc-macro #unhygienic

macro unhygienic2

A dead simple macro to erase macro hygiene

1 unstable release

0.1.0 Sep 4, 2022

#1711 in #proc-macro


Used in 2 crates (via impl_serialize)

MIT license

4KB

Unhygienic2

A dead simple macro to erase macro hygiene. This stringifies the input, then reparses it in the caller's context.

First unhygienic based on proc_macro_hack. Since 1.45 Rust have native support #[proc_macro]. Therefore, proc_macro_hack isn't neeeded.

Example

use unhygienic2::unhygienic;

macro_rules! declare {
    ($exp:expr) => {
        unhygienic! {
            fn func() -> i32 {
                let a = 5;

                $exp
            }
        }
    }
}

declare!({ a + 1 });

fn main() {
    assert_eq!(func(), 6);
}

lib.rs:

A dead simple macro to erase macro hygiene. This stringifies the input, then reparses it in the caller's context. First unhygienic based on proc_macro_hack. Since 1.45 Rust have native support [proc_macro]. Therefore, proc_macro_hack isn't neeeded.

Example

use unhygienic2::unhygienic;

macro_rules! declare {
    ($exp:expr) => {
        unhygienic! {
            fn func() -> i32 {
                let a = 5;

                $exp
            }
        }
    }
}

declare!({ a + 1 });

fn main() {
    assert_eq!(func(), 6);
}

No runtime deps