diff options
| author | bors <bors@rust-lang.org> | 2017-01-15 05:48:34 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-01-15 05:48:34 +0000 |
| commit | 4f0508af90cfe4fac018b1a464ed94a828811600 (patch) | |
| tree | d795bef67c0d54fe193fca200ca6f593842d51dd /src | |
| parent | bf6d7b665b85506dac663945229f00a406904fa5 (diff) | |
| parent | d04c027e9333d632a9ee0dcfbdf0d79dfddf0318 (diff) | |
| download | rust-4f0508af90cfe4fac018b1a464ed94a828811600.tar.gz rust-4f0508af90cfe4fac018b1a464ed94a828811600.zip | |
Auto merge of #39040 - estebank:relevant-impl-multiline, r=nikomatsakis
Use multiline Diagnostic for "relevant impl" list
Provide the following output:
```
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
```
instead of
```
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:
= help: <Bar as Foo<i8>>
= help: <Bar as Foo<i16>>
= help: <Bar as Foo<i32>>
= help: <Bar as Foo<u8>>
= help: and 2 others
error: aborting due to previous error
```
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/traits/error_reporting.rs | 18 | ||||
| -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.stderr | 12 | ||||
| -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.stderr | 15 | ||||
| -rw-r--r-- | src/test/ui/span/multiline-span-simple.stderr | 8 |
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 |
