【描述】
过程宏发生错误时,返回的错误应该有正确的位置信息。
【反例】
#![allow(unused)]
fn main() {
Error::new(Span::call_site(), "requires unit variant")
.to_compile_error()
.into()
}
【正例】
#![allow(unused)]
fn main() {
#[proc_macro_derive(MyMacro)]
pub fn derive_my_macro(input: TokenStream) -> TokenStream {
let derive_input: DeriveInput = syn::parse_macro_input!(input as DeriveInput);
if let Data::Enum(e) = &derive_input.data {
for variant in &e.variants {
if !variant.fields.is_empty() {
return syn::Error::new_spanned(&variant, "must be a unit variable.")
.to_compile_error()
.into();
}
}
}
todo!()
}
}