Suggest borrowing when it would satisfy an unmet trait bound

When there are multiple implementors for the same trait that is present
in an unmet binding, modify the E0277 error to refer to the parent
obligation and verify whether borrowing the argument being passed in
would satisfy the unmet bound. If it would, suggest it.
This commit is contained in:
Esteban Küber
2019-10-15 18:42:27 -07:00
parent 405a3dd91c
commit f57413b717
10 changed files with 107 additions and 24 deletions

View File

@@ -137,10 +137,6 @@ pub trait Fn<Args> : FnMut<Args> {
#[rustc_paren_sugar]
#[rustc_on_unimplemented(
on(Args="()", note="wrap the `{Self}` in a closure with no arguments: `|| {{ /* code */ }}"),
on(
all(Args="(char,)", _Self="std::string::String"),
note="borrowing the `{Self}` might fix the problem"
),
message="expected a `{FnMut}<{Args}>` closure, found `{Self}`",
label="expected an `FnMut<{Args}>` closure, found `{Self}`",
)]