3个稳定版本
1.0.67 | 2023年9月22日 |
---|---|
1.0.36 | 2022年2月7日 |
1.0.24 | 2021年2月25日 |
#181 in 进程宏
26,870每月下载量
用于 42 个crate(4 直接使用)
150KB
3.5K SLoC
safe-proc-macro2
这是移除了不安全代码的 proc_macro2
的分支。查看拒绝的PR。
围绕编译器 proc_macro
crate 的进程宏API的包装器。这个库有两个用途
-
将进程宏类似的功能带到其他上下文,如build.rs和main.rs。
proc_macro
的类型完全是进程宏特定的,并且永远不会存在于进程宏之外代码中。而proc_macro2
的类型可以存在于任何地方,包括非宏代码。通过针对proc_macro2
而不是proc_macro
开发基础库如 syn 和 quote,进程宏生态系统可以很容易地应用于许多其他用例,我们避免了重新实现这些库的非宏等价物。 -
使进程宏可进行单元测试。 由于进程宏的特定性,使用
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.0或MIT许可证。除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在此crate中的任何贡献,都应按上述方式双许可,无需任何额外条款或条件。