#spans #proc-macro #assert #macro

debug-span

可视化proc-macro2的跨度以进行调试和断言

2个不稳定版本

0.2.0 2024年2月10日
0.1.0 2024年2月3日

#237 in 过程宏

MIT许可协议

19KB
353

调试跨度

github crates.io docs.rs build status coverage

此crate提供了一种简单的调试proc-macro2跨度的方法。当您使用过程宏并希望查看源代码中跨度的位置时,它非常有用。它可以用于测试或调试。

[dev-dependencies]
debug-span = "0.1"

# used to parse code and assert output, not required for the crate itself
syn = "2"
insta = "1"
unindent = "0.2"

用法

use debug_span::debug_span;
use syn::spanned::Spanned;
use syn::Data;
use unindent::Unindent;

#[test]
fn test_single_line_span() {
    let input = r###"
            struct Foo;
        "###
        .unindent();
    let derive_input: syn::DeriveInput = syn::parse_str(&input).unwrap();
    let span = derive_input.ident.span();
    let output = debug_span(span, &input);
    insta::assert_snapshot!(output, @r###"
         --> 1:7..1:10
          |
        1 | struct Foo;
          |        ^^^
          |
        "###);
}

#[test]
fn test_multi_line_span() {
    let input = r###"
            struct Foo {
                a: i32,
                b: i32,
            }
        "###
        .unindent();
    let derive_input: syn::DeriveInput = syn::parse_str(&input).unwrap();
    let span = match derive_input.data {
        Data::Struct(s) => s.fields.span(),
        _ => panic!("expected struct"),
    };

    let output = debug_span(span, &input);
    insta::assert_snapshot!(output, @r###"
         --> 1:11..4:1
          |
          |            ┌────╮
        1 | struct Foo {    │
        2 |     a: i32,     │
        3 |     b: i32,     │
        4 | }               │
          | └───────────────╯
          |
        "###);
}

依赖项

~60KB