PoignardAzur / venial

"A very small syn"
MIT License
196 stars 7 forks source link

Macro invocations + `macro_rules!` #50

Closed Bromeon closed 9 months ago

Bromeon commented 10 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 10 months ago

LGTM.