Skip to content

Commit fa1c648

Browse files
authored
Set the span of test function Idents to the span of the origin attribute (#119)
1 parent 39faeaa commit fa1c648

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

crates/test-case-core/src/test_case.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::comment::TestCaseComment;
22
use crate::expr::{TestCaseExpression, TestCaseResult};
33
use crate::utils::fmt_syn;
4-
use proc_macro2::TokenStream as TokenStream2;
4+
use proc_macro2::{Span as Span2, TokenStream as TokenStream2};
55
use quote::quote;
66
use syn::parse::{Parse, ParseStream};
77
use syn::punctuated::Punctuated;
@@ -46,10 +46,14 @@ impl TestCase {
4646
crate::utils::escape_test_name(case_desc)
4747
}
4848

49-
pub fn render(&self, mut item: ItemFn) -> TokenStream2 {
49+
pub fn render(&self, mut item: ItemFn, origin_span: Span2) -> TokenStream2 {
5050
let item_name = item.sig.ident.clone();
5151
let arg_values = self.args.iter();
52-
let test_case_name = self.test_case_name();
52+
let test_case_name = {
53+
let mut test_case_name = self.test_case_name();
54+
test_case_name.set_span(origin_span);
55+
test_case_name
56+
};
5357

5458
let mut attrs = self
5559
.expression

crates/test-case-macros/src/lib.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ extern crate proc_macro;
22

33
use proc_macro::TokenStream;
44

5+
use proc_macro2::Span as Span2;
56
use syn::{parse_macro_input, ItemFn};
67

78
use quote::quote;
@@ -26,7 +27,7 @@ pub fn test_case(args: TokenStream, input: TokenStream) -> TokenStream {
2627
let test_case = parse_macro_input!(args as TestCase);
2728
let mut item = parse_macro_input!(input as ItemFn);
2829

29-
let mut test_cases = vec![test_case];
30+
let mut test_cases = vec![(test_case, Span2::call_site())];
3031
let mut attrs_to_remove = vec![];
3132
let legal_test_case_names = [
3233
parse_quote!(test_case),
@@ -48,7 +49,7 @@ pub fn test_case(args: TokenStream, input: TokenStream) -> TokenStream {
4849
.into()
4950
}
5051
};
51-
test_cases.push(test_case);
52+
test_cases.push((test_case, attr.span()));
5253
attrs_to_remove.push(idx);
5354
}
5455
}
@@ -61,11 +62,11 @@ pub fn test_case(args: TokenStream, input: TokenStream) -> TokenStream {
6162
}
6263

6364
#[allow(unused_mut)]
64-
fn render_test_cases(test_cases: &[TestCase], mut item: ItemFn) -> TokenStream {
65+
fn render_test_cases(test_cases: &[(TestCase, Span2)], mut item: ItemFn) -> TokenStream {
6566
let mut rendered_test_cases = vec![];
6667

67-
for test_case in test_cases {
68-
rendered_test_cases.push(test_case.render(item.clone()));
68+
for (test_case, span) in test_cases {
69+
rendered_test_cases.push(test_case.render(item.clone(), *span));
6970
}
7071

7172
let mod_name = item.sig.ident.clone();

0 commit comments

Comments
 (0)