Loses spans that cover multiple tokens
I added the following macros and test case to your test-crate:
use syn::Error;
#[proc_macro_attribute]
pub fn test1(_: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = proc_macro2::TokenStream::from(input);
Error::new_spanned(input, "...").to_compile_error().into()
}
#[proc_macro_attribute]
#[proc_macro_error]
pub fn test2(_: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = proc_macro2::TokenStream::from(input);
Err(Error::new_spanned(input, "...")).unwrap_or_abort()
}
#[test_crate::test1]
type T = ();
#[test_crate::test2]
type T = ();
fn main() {}
I would expect both to produce the same error but the proc-macro-error one points to the first token only.
error: ...
--> $DIR/spanned.rs:2:1
|
2 | type T = ();
| ^^^^^^^^^^^^
error: ...
--> $DIR/spanned.rs:5:1
|
5 | type T = ();
| ^^^^