about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLena Milizé <me@lvmn.org>2023-04-12 15:43:50 +0200
committerLena Milizé <me@lvmn.org>2023-04-12 15:43:50 +0200
commit04f20d4ac8677b13c41e54fdde319c4e13b58330 (patch)
treebb92c94ec8b3d52ee8a9ca4f343a0094f74f00db
parent4b456cb68314bce1ddb5140e0c234510e489c9fb (diff)
downloadrust-04f20d4ac8677b13c41e54fdde319c4e13b58330.tar.gz
rust-04f20d4ac8677b13c41e54fdde319c4e13b58330.zip
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>
-rw-r--r--compiler/rustc_expand/src/mbe/diagnostics.rs7
-rw-r--r--tests/ui/macros/nonterminal-matching.stderr2
2 files changed, 6 insertions, 3 deletions
diff --git a/compiler/rustc_expand/src/mbe/diagnostics.rs b/compiler/rustc_expand/src/mbe/diagnostics.rs
index 00bb7b0f2a2..35572292271 100644
--- a/compiler/rustc_expand/src/mbe/diagnostics.rs
+++ b/compiler/rustc_expand/src/mbe/diagnostics.rs
@@ -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);`
diff --git a/tests/ui/macros/nonterminal-matching.stderr b/tests/ui/macros/nonterminal-matching.stderr
index c295eddbe47..c2b047022ed 100644
--- a/tests/ui/macros/nonterminal-matching.stderr
+++ b/tests/ui/macros/nonterminal-matching.stderr
@@ -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)