1 个不稳定版本
0.0.1 | 2022年9月17日 |
---|
#544 in #procedural
2KB
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。我们将将这些夜间仅限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许可协议定义的您提交给本仓的任何有意贡献,应如上所述双重许可,没有任何附加条款或条件。