1
Fork 0

Use more targeted suggestion when confusing i8 with std::i8

This commit is contained in:
Esteban Küber 2022-06-07 13:39:21 -07:00
parent 357bc27904
commit 8542dd02a8
3 changed files with 21 additions and 26 deletions

View file

@ -1575,18 +1575,17 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
name: Symbol, name: Symbol,
) -> ErrorGuaranteed { ) -> ErrorGuaranteed {
let mut err = struct_span_err!(self.tcx().sess, span, E0223, "ambiguous associated type"); let mut err = struct_span_err!(self.tcx().sess, span, E0223, "ambiguous associated type");
if let (true, Ok(snippet)) = ( if self
self.tcx() .tcx()
.resolutions(()) .resolutions(())
.confused_type_with_std_module .confused_type_with_std_module
.keys() .keys()
.any(|full_span| full_span.contains(span)), .any(|full_span| full_span.contains(span))
self.tcx().sess.source_map().span_to_snippet(span), {
) {
err.span_suggestion( err.span_suggestion(
span, span.shrink_to_lo(),
"you are looking for the module in `std`, not the primitive type", "you are looking for the module in `std`, not the primitive type",
format!("std::{}", snippet), "std::".to_string(),
Applicability::MachineApplicable, Applicability::MachineApplicable,
); );
} else { } else {

View file

@ -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 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(
err.span_suggestion( span.shrink_to_lo(),
*span, "you are looking for the module in `std`, not the primitive type",
"you are looking for the module in `std`, \ "std::".to_string(),
not the primitive type", Applicability::MachineApplicable,
format!("std::{}", snippet), );
Applicability::MachineApplicable,
);
}
} }
if let ty::RawPtr(_) = &actual.kind() { if let ty::RawPtr(_) = &actual.kind() {
err.note( err.note(
"try using `<*const T>::as_ref()` to get a reference to the \ "try using `<*const T>::as_ref()` to get a reference to the \
type behind the pointer: https://doc.rust-lang.org/std/\ type behind the pointer: https://doc.rust-lang.org/std/\
primitive.pointer.html#method.as_ref", primitive.pointer.html#method.as_ref",
); );
err.note( err.note(
"using `<*const T>::as_ref()` on a pointer \ "using `<*const T>::as_ref()` on a pointer which is unaligned or points \
which is unaligned or points to invalid \ to invalid or uninitialized memory is undefined behavior",
or uninitialized memory is undefined behavior",
); );
} }

View file

@ -7,7 +7,7 @@ LL | let pi = f32::consts::PI;
help: you are looking for the module in `std`, not the primitive type help: you are looking for the module in `std`, not the primitive type
| |
LL | let pi = std::f32::consts::PI; 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 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 --> $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 help: you are looking for the module in `std`, not the primitive type
| |
LL | std::str::from_utf8(bytes) LL | std::str::from_utf8(bytes)
| ~~~~~~~~~~~~~~~~~~~ | +++++
error: aborting due to 2 previous errors error: aborting due to 2 previous errors