140 个版本 (85 个稳定版)
1.0.86 | 2024年6月21日 |
---|---|
1.0.84 | 2024年5月25日 |
1.0.79 | 2024年3月12日 |
1.0.72 | 2023年12月31日 |
0.1.2 | 2017年7月14日 |
#4 在 进程宏 中
每月下载量16,689,730
用于 99,612 个crate (7,559 直接)
170KB
4K SLoC
proc-macro2
编译器进程宏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。我们将使用polyfill将这些夜间仅有的API回填到Rust 1.56.0。由于这些是不稳定的API,它们跟踪夜间编译器,proc-macro2的次要版本可能在任何时候对它们进行破坏性更改。
RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo build
请注意,这不仅仅要对您的crate做,还要对任何依赖于您的crate的crate做。这种传染性是有意为之的,因为它提醒您您不在正常的semver保证范围内。
在proc-macro2文档中,Semver豁免的方法被标记为如此。
许可证
您可以选择根据Apache License,版本2.0或MIT许可证进行许可。除非您明确表示,否则,您提交给此crate的任何有意包含的贡献,根据Apache-2.0许可证定义,应作为上述双重许可,而不附加任何额外条款或条件。