#proc-macro #test #procedural

proc-macro2-test

测试 extern crate proc_macro2 as proc_macro;

1 个不稳定版本

0.0.1 2022年9月17日

#544 in #procedural

MIT/Apache

2KB

proc-macro2

github crates.io docs.rs build status

编译器proc_macro进程宏API的包装器。此库有两个用途

  • 将类似进程宏的功能引入其他上下文,如build.rs和main.rs。 proc_macro中的类型完全特定于进程宏,且永远不会存在于进程宏之外代码中。而proc_macro2类型可以存在于任何地方,包括非宏代码。通过针对proc_macro2而不是proc_macro开发基础库,如synquote,进程宏生态系统可以轻松应用于许多其他用例,并避免重新实现这些库的非宏等效版本。

  • 使进程宏可单元测试。 由于特定于进程宏,使用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.0MIT许可协议
除非您明确声明,否则根据Apache-2.0许可协议定义的您提交给本仓的任何有意贡献,应如上所述双重许可,没有任何附加条款或条件。

无运行时依赖