It can be hard to figure out which parse_quote! invocation failed because -Zmacro-backtrace is unstable + disabled by default.
What do you think about adding [file:line:column] information to panic!() messages inside of parse_quote! and parse_quote_spanned!, and others places where panic!() is used?
We would define a panic! macro as follows:
macro_rules! panic {
($message:literal $($tt:tt)*) => {{
#[cfg(feature = "proc-macro")]
let is_available = proc_macro::is_available();
if is_available {
let location = core::panic::Location::caller();
let file = location.file();
let line = location.line();
let column = location.column();
::core::panic!(concat!("[{}:{}:{}] ", $message), file, line, column $($tt)*)
} else {
::core::panic!($message $($tt)*)
}
}};
}
Then use it everywhere in the crate.
This will make it easier to debug proc-macros, by turning an error message like this:
error: proc-macro derive panicked
--> src/lib.rs:1:10
|
1 | #[derive(Trait)]
| ^^^^^^
|
= help: message: expected string literal
Into the following:
error: proc-macro derive panicked
--> src/lib.rs:1:10
|
1 | #[derive(Trait)]
| ^^^^^^
|
= help: message: [/tmp/macr/src/lib.rs:9:10] expected string literal
It can be hard to figure out which
parse_quote!invocation failed because-Zmacro-backtraceis unstable + disabled by default.What do you think about adding
[file:line:column]information topanic!()messages inside ofparse_quote!andparse_quote_spanned!, and others places wherepanic!()is used?We would define a
panic!macro as follows:Then use it everywhere in the crate.
This will make it easier to debug proc-macros, by turning an error message like this:
Into the following: