4 个版本

0.10.1 2023 年 7 月 10 日
0.10.0 2023 年 3 月 22 日
0.9.1 2020 年 11 月 1 日
0.9.0 2020 年 10 月 10 日

#30 in 过程宏

Download history 91981/week @ 2024-04-22 87623/week @ 2024-04-29 87020/week @ 2024-05-06 94478/week @ 2024-05-13 86798/week @ 2024-05-20 86412/week @ 2024-05-27 97484/week @ 2024-06-03 98778/week @ 2024-06-10 99017/week @ 2024-06-17 92067/week @ 2024-06-24 90188/week @ 2024-07-01 103468/week @ 2024-07-08 103567/week @ 2024-07-15 110351/week @ 2024-07-22 110001/week @ 2024-07-29 103665/week @ 2024-08-05

433,332 每月下载量
用于 1,065 个 crates(19 个直接使用)

MIT/Apache 许可

25KB
389

proc-macro2-diagnostics   crates.io docs.rs

稳定和夜间过程宏的诊断工具!

使用方法

  1. 在您的过程宏中依赖此库。
[dependencies]
proc_macro2_diagnostics = "0.10"
  1. 导入 SpanDiagnosticExt 并在 proc_macro2::Span 上使用其方法来创建 Diagnostic 对象。
use syn::spanned::Spanned;
use proc_macro2::TokenStream;
use proc_macro2_diagnostics::{SpanDiagnosticExt, Diagnostic};

fn my_macro(input: TokenStream) -> Result<TokenStream, Diagnostic> {
    Err(input.span().error("there's a problem here..."))
}
  1. 如果有错误,则作为标记发出诊断
extern crate proc_macro;

pub fn real_macro(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
    match my_macro(tokens.into()) {
        Ok(tokens) => tokens.into(),
        Err(diag) => diag.emit_as_expr_tokens().into()
    }
}

这在夜间或稳定版本上都是正确的。

注意事项

在稳定版本上,由于限制,任何顶级非错误诊断都会被作为错误发出。这将终止编译。为了避免这种情况,您可能希望将非错误诊断的发出通过 cfg 隔离到夜间。

颜色

默认情况下,在稳定版本上错误消息会着色。要禁用,请禁用默认功能。

[dependencies]
proc_macro2_diagnostics = { version = "0.10", default-features = false }

编译器在夜间版本上始终着色诊断信息。

许可证

以下任一许可证,任选其一

依赖关系

~260–730KB
~17K SLoC