diff options
| author | Lena Milizé <me@lvmn.org> | 2023-04-12 15:43:50 +0200 |
|---|---|---|
| committer | Lena Milizé <me@lvmn.org> | 2023-04-12 15:43:50 +0200 |
| commit | 04f20d4ac8677b13c41e54fdde319c4e13b58330 (patch) | |
| tree | bb92c94ec8b3d52ee8a9ca4f343a0094f74f00db | |
| parent | 4b456cb68314bce1ddb5140e0c234510e489c9fb (diff) | |
| download | rust-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.rs | 7 | ||||
| -rw-r--r-- | tests/ui/macros/nonterminal-matching.stderr | 2 |
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) |
