Skip to content

Commit 3784067

Browse files
committed
Point macros 1.1 errors to the input item
Before: ```rust error[E0106]: missing lifetime specifier --> src/main.rs:10:10 | 10 | #[derive(Serialize, Deserialize)] | ^ expected lifetime parameter error[E0038]: the trait `T` cannot be made into an object --> src/main.rs:15:15 | 15 | #[derive(Serialize, Deserialize)] | ^^^^^^^^^^ the trait `T` cannot be made into an object ``` After: ```rust error[E0106]: missing lifetime specifier --> src/main.rs:11:1 | 11 | struct A { | ^ expected lifetime parameter error[E0038]: the trait `T` cannot be made into an object --> src/main.rs:16:1 | 16 | struct B<'a> { | ^ the trait `T` cannot be made into an object ```
1 parent 13c4e32 commit 3784067

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/libsyntax_ext/deriving/custom.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ impl MultiItemModifier for CustomDerive {
5353
}
5454
}
5555

56+
let input_span = item.span;
5657
let input = __internal::new_token_stream(item);
5758
let res = __internal::set_parse_sess(&ecx.parse_sess, || {
5859
let inner = self.inner;
@@ -77,9 +78,9 @@ impl MultiItemModifier for CustomDerive {
7778

7879
// Right now we have no knowledge of spans at all in custom derive
7980
// macros, everything is just parsed as a string. Reassign all spans to
80-
// the #[derive] attribute for better errors here.
81+
// the input `item` for better errors here.
8182
item.into_iter().flat_map(|item| {
82-
ChangeSpan { span: span }.fold_item(item)
83+
ChangeSpan { span: input_span }.fold_item(item)
8384
}).map(Annotatable::Item).collect()
8485
}
8586
}

0 commit comments

Comments
 (0)