diff --git a/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs b/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs
index b7e2ed391cd..1852837d5c7 100644
--- a/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs
+++ b/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs
@@ -1835,6 +1835,7 @@ pub(super) fn report_similar_impl_candidates(
if impl_trait_ref.references_error() {
return false;
}
+ let self_ty = impl_trait_ref.self_ty().to_string();
err.highlighted_help(vec![
StringPart::normal(format!(
"the trait `{}` ",
@@ -1842,16 +1843,24 @@ pub(super) fn report_similar_impl_candidates(
)),
StringPart::highlighted("is"),
StringPart::normal(" implemented for `"),
- StringPart::highlighted(impl_trait_ref.self_ty().to_string()),
+ if let [TypeError::Sorts(_)] = &terrs[..] {
+ StringPart::normal(self_ty)
+ } else {
+ StringPart::highlighted(self_ty)
+ },
StringPart::normal("`"),
]);
if let [TypeError::Sorts(exp_found)] = &terrs[..] {
let exp_found = self.resolve_vars_if_possible(*exp_found);
- err.help(format!(
- "for that trait implementation, expected `{}`, found `{}`",
- exp_found.expected, exp_found.found
- ));
+ err.highlighted_help(vec![
+ StringPart::normal("for that trait implementation, "),
+ StringPart::normal("expected `"),
+ StringPart::highlighted(exp_found.expected.to_string()),
+ StringPart::normal("`, found `"),
+ StringPart::highlighted(exp_found.found.to_string()),
+ StringPart::normal("`"),
+ ]);
}
true
diff --git a/tests/ui/impl-trait/diagnostics/highlight-difference-between-expected-trait-and-found-trait.svg b/tests/ui/impl-trait/diagnostics/highlight-difference-between-expected-trait-and-found-trait.svg
index aaf08b9a246..e09b96e5ff2 100644
--- a/tests/ui/impl-trait/diagnostics/highlight-difference-between-expected-trait-and-found-trait.svg
+++ b/tests/ui/impl-trait/diagnostics/highlight-difference-between-expected-trait-and-found-trait.svg
@@ -33,9 +33,9 @@
|
- = help: the trait `Bar<()>` is implemented for `Struct`
+ = help: the trait `Bar<()>` is implemented for `Struct`
- = help: for that trait implementation, expected `()`, found `i32`
+ = help: for that trait implementation, expected `()`, found `i32`
note: required for `Struct` to implement `Foo<i32>`