#macro-rules #proc-macro #pattern-matching #deno #procedural #emulation #fork

deno-proc-macro-rules

Deno 对 proc-macro-rules 的分支。在过程宏中模拟 macro-rules 模式匹配

3 个版本

0.3.2 2023 年 6 月 24 日
0.3.1 2023 年 6 月 24 日
0.3.0 2023 年 6 月 24 日

#177过程宏

Download history 2888/week @ 2024-03-14 3025/week @ 2024-03-21 2551/week @ 2024-03-28 2480/week @ 2024-04-04 2602/week @ 2024-04-11 2555/week @ 2024-04-18 2229/week @ 2024-04-25 3131/week @ 2024-05-02 3207/week @ 2024-05-09 3242/week @ 2024-05-16 3624/week @ 2024-05-23 2745/week @ 2024-05-30 3320/week @ 2024-06-06 4302/week @ 2024-06-13 3043/week @ 2024-06-20 3117/week @ 2024-06-27

14,190 每月下载量

Apache-2.0/MIT

19KB
359

proc-macro-rules

macro_rules 风格的过程宏语法匹配。

这个包还在开发中,可能不完整,也可能有错误!

示例

rules!(tokens => {
    ($finish:ident ($($found:ident)*) # [ $($inner:tt)* ] $($rest:tt)*) => {
        for f in found {
            do_something(finish, f, inner, rest[0]);
        }
    }
    (foo $($bar:expr)?) => {
        match bar {
            Some(e) => foo_with_expr(e),
            None => foo_no_expr(),
        }
    }
});

使用 proc-macro-rules

在您的 Cargo.toml 中添加 proc-macro-rules = "0.3.0" (或 proc-macro-rules = "0.2.1" 对于 1.31 到 1.56 之间的版本)。

使用 use proc_macro_rules::rules 导入 rules 宏,然后使用 rules!(tokens => { branches });,其中 tokens 是一个计算结果为 TokenStream 的表达式(例如过程宏定义中的参数)。

branches 中的每个分支应具有以下形式:( 模式 ) => { 主体 } 其中 模式 是宏规则风格的模式(使用相同的语法来表示元变量、抽象语法树节点、重复等),而 主体 是当模式匹配时执行的 Rust 代码。在 主体 中,模式中的任何元变量都绑定到来自 proc_macro2syn 库的适当类型的变量。如果元变量位于重复或选项子句中,它将分别被包裹在 VecOption 中。

例如,在上面的例子中的第一个分支中,ident 的类型是 syn::Ident,而 inner 的类型是 Vec<proc_macro2::TokenTree>

构建和测试

使用 cargo build 构建,使用 cargo test --all 测试。

贡献

欢迎贡献!了解缺少或错误的地方将很有帮助(通常我们应该有与 macro_rules 相同的行为,因此任何不同之处都是错误的)。问题、代码、文档、测试和纠正都受欢迎。

依赖关系

~0.3–0.8MB
~19K SLoC