2个不稳定版本
0.2.0 | 2024年2月10日 |
---|---|
0.1.0 | 2024年2月3日 |
#237 in 过程宏
19KB
353 行
调试跨度
此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