From 8542dd02a8c00bba435efe0bed20bc9bb22e7ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Tue, 7 Jun 2022 13:39:21 -0700 Subject: [PATCH] Use more targeted suggestion when confusing i8 with std::i8 --- compiler/rustc_typeck/src/astconv/mod.rs | 19 +++++++-------- .../rustc_typeck/src/check/method/suggest.rs | 24 ++++++++----------- .../suggest-std-when-using-type.stderr | 4 ++-- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index bcff2ae512909..b1e180c701f50 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -1575,18 +1575,17 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { name: Symbol, ) -> ErrorGuaranteed { let mut err = struct_span_err!(self.tcx().sess, span, E0223, "ambiguous associated type"); - if let (true, Ok(snippet)) = ( - self.tcx() - .resolutions(()) - .confused_type_with_std_module - .keys() - .any(|full_span| full_span.contains(span)), - self.tcx().sess.source_map().span_to_snippet(span), - ) { + if self + .tcx() + .resolutions(()) + .confused_type_with_std_module + .keys() + .any(|full_span| full_span.contains(span)) + { err.span_suggestion( - span, + span.shrink_to_lo(), "you are looking for the module in `std`, not the primitive type", - format!("std::{}", snippet), + "std::".to_string(), Applicability::MachineApplicable, ); } else { diff --git a/compiler/rustc_typeck/src/check/method/suggest.rs b/compiler/rustc_typeck/src/check/method/suggest.rs index 0e198907c8d50..4071c389266d3 100644 --- a/compiler/rustc_typeck/src/check/method/suggest.rs +++ b/compiler/rustc_typeck/src/check/method/suggest.rs @@ -327,26 +327,22 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { ); } if let Some(span) = tcx.resolutions(()).confused_type_with_std_module.get(&span) { - if let Ok(snippet) = tcx.sess.source_map().span_to_snippet(*span) { - err.span_suggestion( - *span, - "you are looking for the module in `std`, \ - not the primitive type", - format!("std::{}", snippet), - Applicability::MachineApplicable, - ); - } + err.span_suggestion( + span.shrink_to_lo(), + "you are looking for the module in `std`, not the primitive type", + "std::".to_string(), + Applicability::MachineApplicable, + ); } if let ty::RawPtr(_) = &actual.kind() { err.note( "try using `<*const T>::as_ref()` to get a reference to the \ - type behind the pointer: https://doc.rust-lang.org/std/\ - primitive.pointer.html#method.as_ref", + type behind the pointer: https://doc.rust-lang.org/std/\ + primitive.pointer.html#method.as_ref", ); err.note( - "using `<*const T>::as_ref()` on a pointer \ - which is unaligned or points to invalid \ - or uninitialized memory is undefined behavior", + "using `<*const T>::as_ref()` on a pointer which is unaligned or points \ + to invalid or uninitialized memory is undefined behavior", ); } diff --git a/src/test/ui/suggestions/suggest-std-when-using-type.stderr b/src/test/ui/suggestions/suggest-std-when-using-type.stderr index 4255281d9a7ac..2840fa121a75f 100644 --- a/src/test/ui/suggestions/suggest-std-when-using-type.stderr +++ b/src/test/ui/suggestions/suggest-std-when-using-type.stderr @@ -7,7 +7,7 @@ LL | let pi = f32::consts::PI; help: you are looking for the module in `std`, not the primitive type | LL | let pi = std::f32::consts::PI; - | ~~~~~~~~~~~~~~~~ + | +++++ error[E0599]: no function or associated item named `from_utf8` found for type `str` in the current scope --> $DIR/suggest-std-when-using-type.rs:5:14 @@ -18,7 +18,7 @@ LL | str::from_utf8(bytes) help: you are looking for the module in `std`, not the primitive type | LL | std::str::from_utf8(bytes) - | ~~~~~~~~~~~~~~~~~~~ + | +++++ error: aborting due to 2 previous errors