From 3a252962cd843ae635cd2df00a5e224bdd5fa173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Wed, 6 Nov 2024 21:28:26 +0000 Subject: [PATCH] Use `item_name` instead of a span snippet when talking about const pattern --- compiler/rustc_mir_build/src/thir/pattern/check_match.rs | 5 ++--- tests/ui/consts/const-pattern-irrefutable.rs | 2 +- tests/ui/consts/const-pattern-irrefutable.stderr | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/compiler/rustc_mir_build/src/thir/pattern/check_match.rs b/compiler/rustc_mir_build/src/thir/pattern/check_match.rs index f3cfc8b1a2231..a8830b346ae3c 100644 --- a/compiler/rustc_mir_build/src/thir/pattern/check_match.rs +++ b/compiler/rustc_mir_build/src/thir/pattern/check_match.rs @@ -675,13 +675,12 @@ impl<'p, 'tcx> MatchVisitor<'p, 'tcx> { subpattern: box Pat { kind: PatKind::Constant { opt_def: Some(def_id), .. }, .. }, .. } = pat.kind - && let Ok(snippet) = self.tcx.sess.source_map().span_to_snippet(pat.span) { let span = self.tcx.def_span(def_id); + let variable = self.tcx.item_name(def_id).to_string(); // When we encounter a constant as the binding name, point at the `const` definition. interpreted_as_const = Some(span); - interpreted_as_const_sugg = - Some(InterpretedAsConst { span: pat.span, variable: snippet }); + interpreted_as_const_sugg = Some(InterpretedAsConst { span: pat.span, variable }); } else if let PatKind::Constant { .. } | PatKind::AscribeUserType { subpattern: box Pat { kind: PatKind::Constant { .. }, .. }, diff --git a/tests/ui/consts/const-pattern-irrefutable.rs b/tests/ui/consts/const-pattern-irrefutable.rs index 54d2ad323860d..c590ec8fcd361 100644 --- a/tests/ui/consts/const-pattern-irrefutable.rs +++ b/tests/ui/consts/const-pattern-irrefutable.rs @@ -1,6 +1,6 @@ mod foo { pub const b: u8 = 2; - //~^ missing patterns are not covered because `c` is interpreted as a constant pattern, not a new variable + //~^ missing patterns are not covered because `b` is interpreted as a constant pattern, not a new variable pub const d: u8 = 2; //~^ missing patterns are not covered because `d` is interpreted as a constant pattern, not a new variable } diff --git a/tests/ui/consts/const-pattern-irrefutable.stderr b/tests/ui/consts/const-pattern-irrefutable.stderr index d4365fa16e8e4..c118ce9e48f2f 100644 --- a/tests/ui/consts/const-pattern-irrefutable.stderr +++ b/tests/ui/consts/const-pattern-irrefutable.stderr @@ -18,13 +18,13 @@ error[E0005]: refutable pattern in local binding --> $DIR/const-pattern-irrefutable.rs:19:9 | LL | pub const b: u8 = 2; - | --------------- missing patterns are not covered because `c` is interpreted as a constant pattern, not a new variable + | --------------- missing patterns are not covered because `b` is interpreted as a constant pattern, not a new variable ... LL | let c = 4; | ^ | | | patterns `0_u8..=1_u8` and `3_u8..=u8::MAX` not covered - | help: introduce a variable instead: `c_var` + | help: introduce a variable instead: `b_var` | = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html