PoignardAzur / venial

"A very small syn"
MIT License
192 stars 9 forks source link

Macro invocations + `macro_rules!` #50

Closed Bromeon closed 8 months ago

Bromeon commented 8 months ago

Initial support for declarative/function-style procedural macro invocations, as well as macro_rules! declarations.

fn_macro!(args);

block_macro! {
    fn inner_fn() -> bool;
}

#[macro_export]
macro_rules! stringificate {
    ($item:item) => {
        stringify!($item)
    };
}

Currently limited to mod/impl/trait blocks.

Later I'd like to add support for struct, enum and union, so that a macro can appear in place of a struct field or enum/union variant (e.g. between commas).

I do not plan to support all possible positions where macros are syntactically allowed in Rust (e.g. where clauses), as that would significantly increase the complexity of the parser, for relatively little benefit in everyday life. The above-mentioned items on the other hand are rather common candidates for macros.

PoignardAzur commented 8 months ago

LGTM.