diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2024-02-16 17:08:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-16 17:08:11 +0100 |
| commit | f81fd901dba8b22ea428e09486f5cec25e66f50d (patch) | |
| tree | 0a363d3717ef149def8eba4357bad3ee10ae52ba /tests/ui | |
| parent | c9a7db6e20c8892f770b94dd6d5a16a03721b658 (diff) | |
| parent | e99766d885a9a2c714aa58e06712d30a96b24514 (diff) | |
| download | rust-f81fd901dba8b22ea428e09486f5cec25e66f50d.tar.gz rust-f81fd901dba8b22ea428e09486f5cec25e66f50d.zip | |
Rollup merge of #119928 - d-sonuga:into-iter-sugg, r=compiler-errors
suggest `into_iter()` when `Iterator` method called on `impl IntoIterator` Fix for issue #117711.
Diffstat (limited to 'tests/ui')
| -rw-r--r-- | tests/ui/did_you_mean/collect-without-into-iter-call.rs | 19 | ||||
| -rw-r--r-- | tests/ui/did_you_mean/collect-without-into-iter-call.stderr | 36 |
2 files changed, 55 insertions, 0 deletions
diff --git a/tests/ui/did_you_mean/collect-without-into-iter-call.rs b/tests/ui/did_you_mean/collect-without-into-iter-call.rs new file mode 100644 index 00000000000..ee4d75615bd --- /dev/null +++ b/tests/ui/did_you_mean/collect-without-into-iter-call.rs @@ -0,0 +1,19 @@ +// Tests that the compiler suggests an `into_iter` call when an `Iterator` method +// is called on something that implements `IntoIterator` + +fn main() { + let items = items(); + let other_items = items.map(|i| i + 1); + //~^ ERROR no method named `map` found for opaque type `impl IntoIterator<Item = i32>` in the current scope + let vec: Vec<i32> = items.collect(); + //~^ ERROR no method named `collect` found for opaque type `impl IntoIterator<Item = i32>` in the current scope +} + +fn items() -> impl IntoIterator<Item = i32> { + vec![1, 2, 3] +} + +fn process(items: impl IntoIterator<Item = String>) -> Vec<String> { + items.collect() + //~^ ERROR no method named `collect` found for type parameter `impl IntoIterator<Item = String>` in the current scope +} diff --git a/tests/ui/did_you_mean/collect-without-into-iter-call.stderr b/tests/ui/did_you_mean/collect-without-into-iter-call.stderr new file mode 100644 index 00000000000..797bd1e9e6f --- /dev/null +++ b/tests/ui/did_you_mean/collect-without-into-iter-call.stderr @@ -0,0 +1,36 @@ +error[E0599]: no method named `map` found for opaque type `impl IntoIterator<Item = i32>` in the current scope + --> $DIR/collect-without-into-iter-call.rs:6:29 + | +LL | let other_items = items.map(|i| i + 1); + | ^^^ `impl IntoIterator<Item = i32>` is not an iterator + | +help: call `.into_iter()` first + | +LL | let other_items = items.into_iter().map(|i| i + 1); + | ++++++++++++ + +error[E0599]: no method named `collect` found for opaque type `impl IntoIterator<Item = i32>` in the current scope + --> $DIR/collect-without-into-iter-call.rs:8:31 + | +LL | let vec: Vec<i32> = items.collect(); + | ^^^^^^^ `impl IntoIterator<Item = i32>` is not an iterator + | +help: call `.into_iter()` first + | +LL | let vec: Vec<i32> = items.into_iter().collect(); + | ++++++++++++ + +error[E0599]: no method named `collect` found for type parameter `impl IntoIterator<Item = String>` in the current scope + --> $DIR/collect-without-into-iter-call.rs:17:11 + | +LL | items.collect() + | ^^^^^^^ `impl IntoIterator<Item = String>` is not an iterator + | +help: call `.into_iter()` first + | +LL | items.into_iter().collect() + | ++++++++++++ + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0599`. |
