compiler: print the suggestion only for local macros

And wrap the link in the diagnostic in angle brackets.

Signed-off-by: Lena Milizé <me@lvmn.org>
This commit is contained in:
Lena Milizé 2023-04-12 15:43:50 +02:00
parent 4b456cb683
commit 04f20d4ac8
2 changed files with 6 additions and 3 deletions

View File

@ -67,8 +67,11 @@ pub(super) fn failed_to_match_macro<'cx>(
|| matches!(token.kind, TokenKind::Interpolated(_)))
{
err.note("captured metavariables except for `:tt`, `:ident` and `:lifetime` cannot be compared to other tokens");
err.note("see https://doc.rust-lang.org/nightly/reference/macros-by-example.html#forwarding-a-matched-fragment for more information");
err.help("try using `:tt` instead in the macro definition");
err.note("see <https://doc.rust-lang.org/nightly/reference/macros-by-example.html#forwarding-a-matched-fragment> for more information");
if !def_span.is_dummy() && !cx.source_map().is_imported(def_span) {
err.help("try using `:tt` instead in the macro definition");
}
}
// Check whether there's a missing comma in this macro call, like `println!("{}" a);`

View File

@ -19,7 +19,7 @@ LL | macro n(a $nt_item b) {
LL | complex_nonterminal!(enum E {});
| ------------------------------- in this macro invocation
= note: captured metavariables except for `:tt`, `:ident` and `:lifetime` cannot be compared to other tokens
= note: see https://doc.rust-lang.org/nightly/reference/macros-by-example.html#forwarding-a-matched-fragment for more information
= note: see <https://doc.rust-lang.org/nightly/reference/macros-by-example.html#forwarding-a-matched-fragment> for more information
= help: try using `:tt` instead in the macro definition
= note: this error originates in the macro `complex_nonterminal` (in Nightly builds, run with -Z macro-backtrace for more info)