diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs index 26d51178f4d7b..828106df7821b 100644 --- a/src/librustc_typeck/check/demand.rs +++ b/src/librustc_typeck/check/demand.rs @@ -106,7 +106,10 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { let sole_field = &variant.fields[0]; let sole_field_ty = sole_field.ty(self.tcx, substs); if self.can_coerce(expr_ty, sole_field_ty) { - compatible_variants.push(variant.name); + let mut variant_path = self.tcx.item_path_str(variant.did); + variant_path = variant_path.trim_left_matches("std::prelude::v1::") + .to_string(); + compatible_variants.push(variant_path); } } } @@ -117,7 +120,6 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { err.span_suggestions(expr.span, "perhaps you meant to use a variant of the expected type", suggestions); - return Some(err); } } diff --git a/src/test/ui/did_you_mean/issue-42764.rs b/src/test/ui/did_you_mean/issue-42764.rs index 285bd4b25665d..ecaeb7b1161f7 100644 --- a/src/test/ui/did_you_mean/issue-42764.rs +++ b/src/test/ui/did_you_mean/issue-42764.rs @@ -11,7 +11,7 @@ enum DoubleOption { FirstSome(T), AlternativeSome(T), - None, + Nothing, } fn this_function_expects_a_double_option(d: DoubleOption) {} diff --git a/src/test/ui/did_you_mean/issue-42764.stderr b/src/test/ui/did_you_mean/issue-42764.stderr index 2d168cd4d01ac..7ba129039bc2f 100644 --- a/src/test/ui/did_you_mean/issue-42764.stderr +++ b/src/test/ui/did_you_mean/issue-42764.stderr @@ -8,10 +8,10 @@ error[E0308]: mismatched types found type `usize` help: perhaps you meant to use a variant of the expected type | -21 | this_function_expects_a_double_option(FirstSome(n)); - | ^^^^^^^^^^^^ -21 | this_function_expects_a_double_option(AlternativeSome(n)); - | ^^^^^^^^^^^^^^^^^^ +21 | this_function_expects_a_double_option(DoubleOption::FirstSome(n)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ +21 | this_function_expects_a_double_option(DoubleOption::AlternativeSome(n)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error