#proc-macro #rustc #remove #fork #dylib #spans #rustc-ap-proc-macro

standalone-proc-macro2

基于 proc-macro2 的分支,使用 rustc-ap-proc_macro 以移除 rustc dylib 依赖

2 个版本

使用旧的 Rust 2015

0.2.2 2018 年 2 月 21 日
0.2.1 2018 年 2 月 21 日

1370Rust 模式

Download history 1/week @ 2024-03-13 18/week @ 2024-03-27 26/week @ 2024-04-03 1/week @ 2024-05-29

每月下载 68

MIT/Apache

67KB
2K SLoC

proc-macro2

Build Status Latest Version Rust Documentation

对编译器中的 proc_macro 包的一个小封装,旨在多路复用当前稳定接口(截至 2017-07-05)和即将到来的更丰富的接口。

即将推出的支持具有以下功能:

  • 关于标记的 Span 信息
  • 无需通过字符串进出
  • 结构化输入/输出

希望将库移植到 proc_macro2 后,一旦在 nightly 上稳定,将能够轻松移植到真正的 proc_macro 包。

用法

此包默认在编译器的稳定版本上编译。它只使用编译器上游中 proc_macro 包的稳定表面区域。用法通过

[dependencies]
proc-macro2 = "0.2"

之后

extern crate proc_macro;
extern crate proc_macro2;

#[proc_macro_derive(MyDerive)]
pub fn my_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let input: proc_macro2::TokenStream = input.into();

    let output: proc_macro2::TokenStream = {
        /* transform input */
    };

    output.into()
}

如果您愿意,可以在此包中启用 nightly 功能。这将导致它针对 proc_macro 包的 不稳定和仅限 nightly 的功能 进行编译。这反过来又需要一个 nightly 编译器。这应该有助于保留来自编译器本身的 span 信息。

您可以通过以下方式启用此功能:

[dependencies]
proc-macro2 = { version = "0.2", features = ["nightly"] }

不稳定功能

proc-macro2 支持从 proc_macro 导出一些目前高度不稳定的方法,这些方法可能在 proc_macro 稳定的第一次尝试中不会稳定化。默认情况下不会导出这些功能。任何小版本的 proc-macro2 都可能在任何时候对它们进行破坏性更改。

要启用这些功能,必须将 procmacro2_semver_exempt 配置标志传递给 rustc。

RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo build

请注意,这不仅必须为您自己的包执行,还必须为任何依赖于您的包的包执行。这种传染性是故意的,因为它提醒您您已经超出了正常的 semver 保证。

许可证

此项目受以下任一许可证的许可:

由您选择。

贡献

除非您明确声明,否则您提交给 Serde 的任何有意贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~3MB
~55K SLoC