about summary refs log tree commit diff
path: root/tests/ui
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2024-02-16 17:08:11 +0100
committerGitHub <noreply@github.com>2024-02-16 17:08:11 +0100
commitf81fd901dba8b22ea428e09486f5cec25e66f50d (patch)
tree0a363d3717ef149def8eba4357bad3ee10ae52ba /tests/ui
parentc9a7db6e20c8892f770b94dd6d5a16a03721b658 (diff)
parente99766d885a9a2c714aa58e06712d30a96b24514 (diff)
downloadrust-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.rs19
-rw-r--r--tests/ui/did_you_mean/collect-without-into-iter-call.stderr36
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`.