Opaque type locations in error message for clarity.

This commit is contained in:
Giles Cope 2019-09-05 00:08:52 +01:00
parent b50520835f
commit 9483db5052
2 changed files with 11 additions and 4 deletions

View File

@ -1136,12 +1136,19 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
if let Some((expected, found)) = expected_found { if let Some((expected, found)) = expected_found {
match (terr, is_simple_error, expected == found) { match (terr, is_simple_error, expected == found) {
(&TypeError::Sorts(ref values), false, true) => { (&TypeError::Sorts(ref values), false, true) => {
let sort_string = | a_type: Ty<'tcx> |
if let ty::Opaque(def_id, _) = a_type.sty {
format!(" (opaque type at {})", self.tcx.sess.source_map()
.mk_substr_filename(self.tcx.def_span(def_id)))
} else {
format!(" ({})", a_type.sort_string(self.tcx))
};
diag.note_expected_found_extra( diag.note_expected_found_extra(
&"type", &"type",
expected, expected,
found, found,
&format!(" ({})", values.expected.sort_string(self.tcx)), &sort_string(values.expected),
&format!(" ({})", values.found.sort_string(self.tcx)), &sort_string(values.found),
); );
} }
(_, false, _) => { (_, false, _) => {

View File

@ -10,8 +10,8 @@ LL | | thing_two()
LL | | }.await LL | | }.await
| |_____- if and else have incompatible types | |_____- if and else have incompatible types
| |
= note: expected type `impl std::future::Future` (opaque type) = note: expected type `impl std::future::Future` (opaque type at <$DIR/opaque-type-error.rs:8:19>)
found type `impl std::future::Future` (opaque type) found type `impl std::future::Future` (opaque type at <$DIR/opaque-type-error.rs:12:19>)
= note: distinct uses of `impl Trait` result in different opaque types = note: distinct uses of `impl Trait` result in different opaque types
= help: if both `Future`s have the same `Output` type, consider `.await`ing on both of them = help: if both `Future`s have the same `Output` type, consider `.await`ing on both of them