Rollup merge of #52702 - csmoe:mut_diff, r=estebank

Suggest fix when encountering different mutability from impl to trait

Closes https://github.com/rust-lang/rust/issues/52412
r? @estebank
This commit is contained in:
kennytm 2018-07-28 16:24:55 +08:00 committed by GitHub
commit 80c798b982
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 0 deletions

View file

@ -319,6 +319,17 @@ fn compare_predicate_entailment<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
E0053,
"method `{}` has an incompatible type for trait",
trait_m.ident);
if let TypeError::Mutability = terr {
if let Some(trait_err_span) = trait_err_span {
if let Ok(trait_err_str) = tcx.sess.codemap().span_to_snippet(trait_err_span) {
diag.span_suggestion(
impl_err_span,
"consider change the type to match the mutability in trait",
format!("{}", trait_err_str),
);
}
}
}
infcx.note_type_err(&mut diag,
&cause,

View file

@ -9,6 +9,10 @@ LL | fn bar(&mut self, other: &Foo) {}
|
= note: expected type `fn(&mut Baz, &mut dyn Foo)`
found type `fn(&mut Baz, &dyn Foo)`
help: consider change the type to match the mutability in trait
|
LL | fn bar(&mut self, other: &mut Foo) {}
| ^^^^^^^^
error: aborting due to previous error

View file

@ -21,6 +21,10 @@ LL | fn bar(&mut self) { }
|
= note: expected type `fn(&Bar)`
found type `fn(&mut Bar)`
help: consider change the type to match the mutability in trait
|
LL | fn bar(&self) { }
| ^^^^^
error: aborting due to 2 previous errors

View file

@ -21,6 +21,10 @@ LL | fn bar(&mut self, bar: &Bar) { } //~ ERROR incompatible type
|
= note: expected type `fn(&mut Bar, &mut Bar)`
found type `fn(&mut Bar, &Bar)`
help: consider change the type to match the mutability in trait
|
LL | fn bar(&mut self, bar: &mut Bar) { } //~ ERROR incompatible type
| ^^^^^^^^
error: aborting due to 2 previous errors