mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 14:31:55 +00:00
Rollup merge of #109472 - MU001999:patch-3, r=eholk
Add parentheses properly for method calls Fixes #109436
This commit is contained in:
commit
dddede4a24
@ -1356,6 +1356,31 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
} else {
|
||||
let is_mut = mut_ref_self_ty_satisfies_pred || ref_inner_ty_mut;
|
||||
let sugg_prefix = format!("&{}", if is_mut { "mut " } else { "" });
|
||||
let sugg_msg = &format!(
|
||||
"consider{} borrowing here",
|
||||
if is_mut { " mutably" } else { "" }
|
||||
);
|
||||
|
||||
// Issue #109436, we need to add parentheses properly for method calls
|
||||
// for example, `foo.into()` should be `(&foo).into()`
|
||||
if let Ok(snippet) = self.tcx.sess.source_map().span_to_snippet(
|
||||
self.tcx.sess.source_map().span_look_ahead(span, Some("."), Some(50)),
|
||||
) {
|
||||
if snippet == "." {
|
||||
err.multipart_suggestion_verbose(
|
||||
sugg_msg,
|
||||
vec![
|
||||
(span.shrink_to_lo(), format!("({}", sugg_prefix)),
|
||||
(span.shrink_to_hi(), ")".to_string()),
|
||||
],
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Issue #104961, we need to add parentheses properly for compond expressions
|
||||
// for example, `x.starts_with("hi".to_string() + "you")`
|
||||
// should be `x.starts_with(&("hi".to_string() + "you"))`
|
||||
@ -1372,14 +1397,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
_ => false,
|
||||
};
|
||||
|
||||
let is_mut = mut_ref_self_ty_satisfies_pred || ref_inner_ty_mut;
|
||||
let span = if needs_parens { span } else { span.shrink_to_lo() };
|
||||
let sugg_prefix = format!("&{}", if is_mut { "mut " } else { "" });
|
||||
let sugg_msg = &format!(
|
||||
"consider{} borrowing here",
|
||||
if is_mut { " mutably" } else { "" }
|
||||
);
|
||||
|
||||
let suggestions = if !needs_parens {
|
||||
vec![(span.shrink_to_lo(), format!("{}", sugg_prefix))]
|
||||
} else {
|
||||
|
13
tests/ui/suggestions/issue-109436.rs
Normal file
13
tests/ui/suggestions/issue-109436.rs
Normal file
@ -0,0 +1,13 @@
|
||||
struct Foo;
|
||||
struct Bar;
|
||||
|
||||
impl From<&Foo> for Bar {
|
||||
fn from(foo: &Foo) -> Bar {
|
||||
Bar
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let foo = Foo;
|
||||
let b: Bar = foo.into(); //~ ERROR E0277
|
||||
}
|
15
tests/ui/suggestions/issue-109436.stderr
Normal file
15
tests/ui/suggestions/issue-109436.stderr
Normal file
@ -0,0 +1,15 @@
|
||||
error[E0277]: the trait bound `Foo: Into<_>` is not satisfied
|
||||
--> $DIR/issue-109436.rs:12:22
|
||||
|
|
||||
LL | let b: Bar = foo.into();
|
||||
| ^^^^ the trait `~const Into<_>` is not implemented for `Foo`
|
||||
|
|
||||
= note: required for `Foo` to implement `Into<Bar>`
|
||||
help: consider borrowing here
|
||||
|
|
||||
LL | let b: Bar = (&foo).into();
|
||||
| ++ +
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user