Repository: rust
Issue: Error messages on Iterator become confusing with previous errors
Labels: A-diagnostics,T-compiler

### Code

```Rust
use std::iter;

struct NotAnIterator;

fn main() {
    let _ = iter::once(NotAnIterator)
        .chain(NotAnIterator)
        .chain(NotAnIterator);
}
```


### Current output

```Shell
error[E0277]: `NotAnIterator` is not an iterator
 --> src/main.rs:7:10
  |
7 |         .chain(NotAnIterator)
  |          ^^^^^ `NotAnIterator` is not an iterator
  |
  = help: the trait `Iterator` is not implemented for `NotAnIterator`
  = note: required for `NotAnIterator` to implement `IntoIterator`

error[E0599]: the method `chain` exists for struct `Chain<Once<NotAnIterator>, NotAnIterator>`, but its trait bounds were not satisfied
  --> src/main.rs:8:10
   |
3  |   struct NotAnIterator;
   |   --------------------
   |   |
   |   doesn't satisfy `<NotAnIterator as Iterator>::Item = NotAnIterator`
   |   doesn't satisfy `NotAnIterator: Iterator`
...
6  |       let _ = iter::once(NotAnIterator)
   |  _____________-
7  | |         .chain(NotAnIterator)
8  | |         .chain(NotAnIterator);
   | |         -^^^^^ method cannot be called on `Chain<Once<NotAnIterator>, NotAnIterator>` due to unsatisfied trait bounds
   | |_________|
   | 
   |
  ::: /home/multisn8/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/chain.rs:23:1
   |
23 |   pub struct Chain<A, B> {
   |   ---------------------- doesn't satisfy `_: Iterator`
   |
   = note: the following trait bounds were not satisfied:
           `<NotAnIterator as Iterator>::Item = NotAnIterator`
           which is required by `std::iter::Chain<std::iter::Once<NotAnIterator>, NotAnIterator>: Iterator`
           `NotAnIterator: Iterator`
           which is required by `std::iter::Chain<std::iter::Once<NotAnIterator>, NotAnIterator>: Iterator`
           `std::iter::Chain<std::iter::Once<NotAnIterator>, NotAnIterator>: Iterator`
           which is required by `&mut std::iter::Chain<std::iter::Once<NotAnIterator>, NotAnIterator>: Iterator`
note: the trait `Iterator` must be implemented
  --> /home/multisn8/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs:75:1
   |
75 | pub trait Iterator {
   | ^^^^^^^^^^^^^^^^^^

Some errors have detailed explanations: E0277, E0599.
For more information about an error, try `rustc --explain E0277`.
error: could not compile `errornous-chain` (bin "errornous-chain") due to 2 previous errors
```


### Desired output

```Shell
Checking errornous-chain v0.1.0 (/home/multisn8/info/playground/rust/errornous-chain)
error[E0277]: `NotAnIterator` is not an iterator
 --> src/main.rs:7:10
  |
7 |         .chain(NotAnIterator)
  |       ---^^^^^
8 |       | .chain(NotAnIterator)
  |       |  ^^^^^
  |       |  |
  |       `NotAnIterator` is not an iterator
  |
  = help: the trait `Iterator` is not implemented for `NotAnIterator`
  = note: required for `NotAnIterator` to implement `IntoIterator`

Some errors have detailed explanations: E0277.
For more information about an error, try `rustc --explain E0277`.
error: could not compile `errornous-chain` (bin "errornous-chain") due to a previous error
```


### Rationale and extra context

(do note that the desired output is completely dreamed up and is by no chance how exactly the compiler should tag this, it's just a suggestion)

In my case, I was foolishly trying to chain individual elements to the iterator, where I could stuff them into one iterator and chain them as well. But the error message led me into thinking that I had to investigate `NotAnIterator` because it did not act right as an `Item`.

### Other cases

_No response_

### Anything else?

```
 $ rustc -vV
rustc 1.70.0-nightly (3a8a131e9 2023-04-02)
binary: rustc
commit-hash: 3a8a131e9509c478ece1c58fe0ea2d49463d2300
commit-date: 2023-04-02
host: x86_64-unknown-linux-gnu
release: 1.70.0-nightly
LLVM version: 16.0.0
```