summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_infer/src/traits/error_reporting
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_infer/src/traits/error_reporting')
-rw-r--r--compiler/rustc_infer/src/traits/error_reporting/mod.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/compiler/rustc_infer/src/traits/error_reporting/mod.rs b/compiler/rustc_infer/src/traits/error_reporting/mod.rs
index 329660119..b3cfd843a 100644
--- a/compiler/rustc_infer/src/traits/error_reporting/mod.rs
+++ b/compiler/rustc_infer/src/traits/error_reporting/mod.rs
@@ -101,12 +101,19 @@ pub fn report_object_safety_error<'tcx>(
to be resolvable dynamically; for more information visit \
<https://doc.rust-lang.org/reference/items/traits.html#object-safety>",
);
+
+ // Only provide the help if its a local trait, otherwise it's not actionable.
if trait_span.is_some() {
let mut reported_violations: Vec<_> = reported_violations.into_iter().collect();
reported_violations.sort();
- for violation in reported_violations {
- // Only provide the help if its a local trait, otherwise it's not actionable.
- violation.solution(&mut err);
+
+ let mut potential_solutions: Vec<_> =
+ reported_violations.into_iter().map(|violation| violation.solution()).collect();
+ potential_solutions.sort();
+ // Allows us to skip suggesting that the same item should be moved to another trait multiple times.
+ potential_solutions.dedup();
+ for solution in potential_solutions {
+ solution.add_to(&mut err);
}
}