about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/traits/error_reporting.rs18
-rw-r--r--src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-1.rs (renamed from src/test/compile-fail/issue-21659-show-relevant-trait-impls-1.rs)0
-rw-r--r--src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-1.stderr12
-rw-r--r--src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.rs (renamed from src/test/compile-fail/issue-21659-show-relevant-trait-impls-2.rs)0
-rw-r--r--src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr15
-rw-r--r--src/test/ui/span/multiline-span-simple.stderr8
6 files changed, 41 insertions, 12 deletions
diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs
index ab8c552d561..5cc9875e801 100644
--- a/src/librustc/traits/error_reporting.rs
+++ b/src/librustc/traits/error_reporting.rs
@@ -366,15 +366,17 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
             return;
         }
 
-        err.help(&format!("the following implementations were found:"));
-
         let end = cmp::min(4, impl_candidates.len());
-        for candidate in &impl_candidates[0..end] {
-            err.help(&format!("  {:?}", candidate));
-        }
-        if impl_candidates.len() > 4 {
-            err.help(&format!("and {} others", impl_candidates.len()-4));
-        }
+        err.help(&format!("the following implementations were found:{}{}",
+                          &impl_candidates[0..end].iter().map(|candidate| {
+                              format!("\n  {:?}", candidate)
+                          }).collect::<String>(),
+                          if impl_candidates.len() > 4 {
+                              format!("\nand {} others", impl_candidates.len() - 4)
+                          } else {
+                              "".to_owned()
+                          }
+                          ));
     }
 
     /// Reports that an overflow has occurred and halts compilation. We
diff --git a/src/test/compile-fail/issue-21659-show-relevant-trait-impls-1.rs b/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-1.rs
index 99035209e14..99035209e14 100644
--- a/src/test/compile-fail/issue-21659-show-relevant-trait-impls-1.rs
+++ b/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-1.rs
diff --git a/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-1.stderr b/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-1.stderr
new file mode 100644
index 00000000000..9010de081da
--- /dev/null
+++ b/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-1.stderr
@@ -0,0 +1,12 @@
+error[E0277]: the trait bound `Bar: Foo<usize>` is not satisfied
+  --> $DIR/issue-21659-show-relevant-trait-impls-1.rs:34:8
+   |
+34 |     f1.foo(1usize);
+   |        ^^^ the trait `Foo<usize>` is not implemented for `Bar`
+   |
+   = help: the following implementations were found:
+             <Bar as Foo<i32>>
+             <Bar as Foo<u8>>
+
+error: aborting due to previous error
+
diff --git a/src/test/compile-fail/issue-21659-show-relevant-trait-impls-2.rs b/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.rs
index 2009c32c854..2009c32c854 100644
--- a/src/test/compile-fail/issue-21659-show-relevant-trait-impls-2.rs
+++ b/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.rs
diff --git a/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr b/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr
new file mode 100644
index 00000000000..e9591a64784
--- /dev/null
+++ b/src/test/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the trait bound `Bar: Foo<usize>` is not satisfied
+  --> $DIR/issue-21659-show-relevant-trait-impls-2.rs:38:8
+   |
+38 |     f1.foo(1usize);
+   |        ^^^ the trait `Foo<usize>` is not implemented for `Bar`
+   |
+   = help: the following implementations were found:
+             <Bar as Foo<i8>>
+             <Bar as Foo<i16>>
+             <Bar as Foo<i32>>
+             <Bar as Foo<u8>>
+           and 2 others
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/span/multiline-span-simple.stderr b/src/test/ui/span/multiline-span-simple.stderr
index b801325114c..85c11c05b9f 100644
--- a/src/test/ui/span/multiline-span-simple.stderr
+++ b/src/test/ui/span/multiline-span-simple.stderr
@@ -10,10 +10,10 @@ error[E0277]: the trait bound `u32: std::ops::Add<()>` is not satisfied
    | |______________^ ...ending here: the trait `std::ops::Add<()>` is not implemented for `u32`
    |
    = help: the following implementations were found:
-   = help:   <u32 as std::ops::Add>
-   = help:   <&'a u32 as std::ops::Add<u32>>
-   = help:   <u32 as std::ops::Add<&'a u32>>
-   = help:   <&'b u32 as std::ops::Add<&'a u32>>
+             <u32 as std::ops::Add>
+             <&'a u32 as std::ops::Add<u32>>
+             <u32 as std::ops::Add<&'a u32>>
+             <&'b u32 as std::ops::Add<&'a u32>>
 
 error: aborting due to previous error