1个稳定版本
1.0.66 | 2023年7月17日 |
---|
#630 在 过程宏 中
140KB
3.5K SLoC
proc-macro2
编译器 proc_macro
包的过程宏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 = proc_macro2::TokenStream::from(input);
let output: 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。我们将用这些夜间-only API填充Rust 1.56.0。由于这些是跟踪夜间编译器的非稳定API,proc-macro2的较小版本可能会在任何时候对这些API进行破坏性更改。
RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo build
请注意,这不仅要针对您的包执行,还要针对任何依赖您的包的包。这种传染性是有意为之的,因为它提醒您您已经超出了正常的semver保证。
在 proc-macro2 文档中,Semver 免除方法被标记为如此。
许可证
根据您的要求,许可协议可以是 Apache License, Version 2.0 或 MIT 许可证。除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交给本仓库的任何贡献,都应如上所述双重许可,不附加任何额外条款或条件。