Crate identity_macro

Source
Expand description

Remove metavariable fragment to make it reusable for macro_rules

Resetting span of Group will subtly forget that Group comes from metavariable

§Example

Compile failed case:

macro_rules! foo {
    (1+2) => {};
}
macro_rules! bar {
    ($e:expr) => {
        foo!($e)
    };
}
bar!(1+2);

Use identity macro:

use identity_macro::identity;

macro_rules! foo {
    (1+2) => {};
}
macro_rules! bar {
    ($e:expr) => {
        identity!(foo!($e))
    };
}
bar!(1+2);

After matching with objects like $e:expr, the content will be wrapped in a Group(Delimiter::None), and marked with fragments using span related methods to prevent it from being matched by different fragments

This crate utilizes the fragment information lost when setting the span to enable it to be re matched

NOTE: macro_rules will automatically flatten Group(Delimiter::None) without fragments, so there is no need to manually unpack them, but it is also not possible to use tt to pass the entire Group

Macros§

identity
Remove metavariable fragment to make it reusable for macro_rules
identity_inner
Like [identity], But only handle the content inside #identity(...)