1.0.0-rc4 |
|
---|---|
1.0.0-rc1 |
|
0.0.0 |
|
#79 in #unstable
125KB
3K SLoC
proc-macro2
编译器 proc_macro
的过程宏 API 的包装器。此库有三个用途
-
将过程宏功能引入其他上下文,如build.rs和main.rs。
proc_macro
的类型完全特定于过程宏,并且永远不会存在于过程宏之外。同时,proc_macro2
类型可以在任何地方存在,包括非宏代码。通过针对proc_macro2
而不是proc_macro
开发基础库,如 syn 和 quote,过程宏生态系统可以轻松应用于许多其他用例,我们避免了重新实现这些库的非宏等效项。 -
使过程宏可进行单元测试。 由于特定于过程宏,使用
proc_macro
的任何内容都不能从单元测试中执行。为了使辅助库或宏的组件可以独立测试,必须使用proc_macro2
实现。 -
提供所有编译器版本中最新的、最好的API。 过程宏首次在Rust 1.15.0中引入,接口极其简单。从那时起,许多改进已实现,使宏更加灵活和易于编写。此库跟踪最新稳定编译器的过程宏 API,但使用 polyfill 在 1.15.0 以来任何编译器上提供一致的 API。
使用方法
[dependencies]
proc-macro2 = "0.4"
典型过程宏的结构通常如下所示
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。与往常一样,我们将把这些夜间特有的 API 补充到 Rust 1.15.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 许可证定义的,您有意提交以包含在此 crate 中的任何贡献,都应按上述方式双重许可,不附加任何额外条款或条件。