#macro #syn

safe-proc-macro2

移除了不安全代码的 proc_macro2 crate 的分支

3个稳定版本

1.0.67 2023年9月22日
1.0.36 2022年2月7日
1.0.24 2021年2月25日

#181 in 进程宏

Download history 6438/week @ 2024-04-27 6900/week @ 2024-05-04 6853/week @ 2024-05-11 6733/week @ 2024-05-18 5678/week @ 2024-05-25 6066/week @ 2024-06-01 5758/week @ 2024-06-08 5688/week @ 2024-06-15 8060/week @ 2024-06-22 5740/week @ 2024-06-29 5774/week @ 2024-07-06 7109/week @ 2024-07-13 6742/week @ 2024-07-20 6739/week @ 2024-07-27 6036/week @ 2024-08-03 6267/week @ 2024-08-10

26,870每月下载量
用于 42 个crate(4 直接使用)

MIT/Apache

150KB
3.5K SLoC

safe-proc-macro2

Build Status Latest Version Rust Documentation

这是移除了不安全代码的 proc_macro2 的分支。查看拒绝的PR


围绕编译器 proc_macro crate 的进程宏API的包装器。这个库有两个用途

  • 将进程宏类似的功能带到其他上下文,如build.rs和main.rs。 proc_macro 的类型完全是进程宏特定的,并且永远不会存在于进程宏之外代码中。而 proc_macro2 的类型可以存在于任何地方,包括非宏代码。通过针对 proc_macro2 而不是 proc_macro 开发基础库如 synquote,进程宏生态系统可以很容易地应用于许多其他用例,我们避免了重新实现这些库的非宏等价物。

  • 使进程宏可进行单元测试。 由于进程宏的特定性,使用 proc_macro 的任何内容都不能从单元测试中执行。为了使辅助库或宏的组件能够独立测试,它们必须使用 proc_macro2 实现。

用法

[dependencies]
proc-macro2 = "1.0"

典型进程宏的结构通常如下所示

extern crate proc_macro;

#[proc_macro_derive(MyDerive)]
pub fn my_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let input = safe_proc_macro2::TokenStream::from(input);

    let output: safe_proc_macro2::TokenStream = {
        /* transform input */
    };

    proc_macro::TokenStream::from(output)
}

如果使用 Syn 进行解析,您将使用 parse_macro_input! 来正确传播解析错误,当解析失败时将错误返回到编译器。

不稳定功能

proc-macro2 的默认功能集跟踪最新的稳定编译器API。在 proc_macro 中尚未稳定的功能默认情况下不通过 proc-macro2 暴露。

要启用最新夜间编译器中可用的附加API,必须将配置标志procmacro2_semver_exempt传递给rustc。我们将把这些仅限夜间的API填充回Rust 1.56.0。由于这些是不稳定的API,它们跟踪夜间编译器,proc-macro2的次要版本可能会随时对它们进行破坏性更改。

RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo build

请注意,这不仅需要对您的crate进行操作,还需要对依赖您的crate的任何crate进行操作。这种传染性是故意的,因为它提醒您,您已超出正常semver保证的范围。

在proc-macro2文档中,Semver免检方法被标记为如此。


许可证

根据您的选择,在Apache License,Version 2.0或MIT许可证下获得许可。Apache许可证,版本2.0MIT许可证
除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在此crate中的任何贡献,都应按上述方式双许可,无需任何额外条款或条件。

依赖项