#proc-macro #macro #default #stable #unstable #interface

已删除 proc-macro2-next

即将推出的 proc_macro API 的稳定实现。默认情况下,还提供了一个选项,以使用上游不稳定 API 重新实现自身。

1.0.0-rc4 2019年8月11日
1.0.0-rc1 2019年7月29日
0.0.0 2019年7月18日

#79 in #unstable


3 个crate中使用(直接使用2个)

MIT/Apache

125KB
3K SLoC

proc-macro2

Build Status Latest Version Rust Documentation

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

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

  • 使过程宏可进行单元测试。 由于特定于过程宏,使用 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.0MIT 许可证
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在此 crate 中的任何贡献,都应按上述方式双重许可,不附加任何额外条款或条件。

依赖项