Skip to content

Commit 04dd580

Browse files
committed
unnecessary_clone: split rustfixable lint out into separate test
1 parent 363e382 commit 04dd580

5 files changed

+77
-47
lines changed

tests/ui/iter_cloned_collect.fixed

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// run-rustfix
2+
3+
#![allow(unused)]
4+
5+
use std::collections::HashSet;
6+
use std::collections::VecDeque;
7+
8+
fn main() {
9+
let v = [1, 2, 3, 4, 5];
10+
let v2: Vec<isize> = v.to_vec();
11+
let v3: HashSet<isize> = v.iter().cloned().collect();
12+
let v4: VecDeque<isize> = v.iter().cloned().collect();
13+
14+
// Handle macro expansion in suggestion
15+
let _: Vec<isize> = vec![1, 2, 3].to_vec();
16+
17+
// Issue #3704
18+
unsafe {
19+
let _: Vec<u8> = std::ffi::CStr::from_ptr(std::ptr::null())
20+
.to_bytes().to_vec();
21+
}
22+
}

tests/ui/iter_cloned_collect.rs

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// run-rustfix
2+
3+
#![allow(unused)]
4+
5+
use std::collections::HashSet;
6+
use std::collections::VecDeque;
7+
8+
fn main() {
9+
let v = [1, 2, 3, 4, 5];
10+
let v2: Vec<isize> = v.iter().cloned().collect();
11+
let v3: HashSet<isize> = v.iter().cloned().collect();
12+
let v4: VecDeque<isize> = v.iter().cloned().collect();
13+
14+
// Handle macro expansion in suggestion
15+
let _: Vec<isize> = vec![1, 2, 3].iter().cloned().collect();
16+
17+
// Issue #3704
18+
unsafe {
19+
let _: Vec<u8> = std::ffi::CStr::from_ptr(std::ptr::null())
20+
.to_bytes()
21+
.iter()
22+
.cloned()
23+
.collect();
24+
}
25+
}

tests/ui/iter_cloned_collect.stderr

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
error: called `iter().cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable
2+
--> $DIR/iter_cloned_collect.rs:10:27
3+
|
4+
LL | let v2: Vec<isize> = v.iter().cloned().collect();
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.to_vec()`
6+
|
7+
= note: `-D clippy::iter-cloned-collect` implied by `-D warnings`
8+
9+
error: called `iter().cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable
10+
--> $DIR/iter_cloned_collect.rs:15:38
11+
|
12+
LL | let _: Vec<isize> = vec![1, 2, 3].iter().cloned().collect();
13+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.to_vec()`
14+
15+
error: called `iter().cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable
16+
--> $DIR/iter_cloned_collect.rs:20:24
17+
|
18+
LL | .to_bytes()
19+
| ________________________^
20+
LL | | .iter()
21+
LL | | .cloned()
22+
LL | | .collect();
23+
| |______________________^ help: try: `.to_vec()`
24+
25+
error: aborting due to 3 previous errors
26+

tests/ui/unnecessary_clone.rs

+2-21
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
// does not test any rustfixable lints
2+
13
#![warn(clippy::clone_on_ref_ptr)]
24
#![allow(unused)]
35

46
use std::cell::RefCell;
5-
use std::collections::HashSet;
6-
use std::collections::VecDeque;
77
use std::rc::{self, Rc};
88
use std::sync::{self, Arc};
99

@@ -66,25 +66,6 @@ fn clone_on_double_ref() {
6666
println!("{:p} {:p}", *y, z);
6767
}
6868

69-
fn iter_clone_collect() {
70-
let v = [1, 2, 3, 4, 5];
71-
let v2: Vec<isize> = v.iter().cloned().collect();
72-
let v3: HashSet<isize> = v.iter().cloned().collect();
73-
let v4: VecDeque<isize> = v.iter().cloned().collect();
74-
75-
// Handle macro expansion in suggestion
76-
let _: Vec<isize> = vec![1, 2, 3].iter().cloned().collect();
77-
78-
// Issue #3704
79-
unsafe {
80-
let _: Vec<u8> = std::ffi::CStr::from_ptr(std::ptr::null())
81-
.to_bytes()
82-
.iter()
83-
.cloned()
84-
.collect();
85-
}
86-
}
87-
8869
mod many_derefs {
8970
struct A;
9071
struct B;

tests/ui/unnecessary_clone.stderr

+2-26
Original file line numberDiff line numberDiff line change
@@ -78,35 +78,11 @@ help: or try being explicit about what type to clone
7878
LL | let z: &Vec<_> = &std::vec::Vec<i32>::clone(y);
7979
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8080

81-
error: called `iter().cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable
82-
--> $DIR/unnecessary_clone.rs:71:27
83-
|
84-
LL | let v2: Vec<isize> = v.iter().cloned().collect();
85-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.to_vec()`
86-
|
87-
= note: `-D clippy::iter-cloned-collect` implied by `-D warnings`
88-
89-
error: called `iter().cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable
90-
--> $DIR/unnecessary_clone.rs:76:38
91-
|
92-
LL | let _: Vec<isize> = vec![1, 2, 3].iter().cloned().collect();
93-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.to_vec()`
94-
95-
error: called `iter().cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable
96-
--> $DIR/unnecessary_clone.rs:81:24
97-
|
98-
LL | .to_bytes()
99-
| ________________________^
100-
LL | | .iter()
101-
LL | | .cloned()
102-
LL | | .collect();
103-
| |______________________^ help: try: `.to_vec()`
104-
10581
error: using `clone` on a `Copy` type
106-
--> $DIR/unnecessary_clone.rs:119:20
82+
--> $DIR/unnecessary_clone.rs:100:20
10783
|
10884
LL | let _: E = a.clone();
10985
| ^^^^^^^^^ help: try dereferencing it: `*****a`
11086

111-
error: aborting due to 15 previous errors
87+
error: aborting due to 12 previous errors
11288

0 commit comments

Comments
 (0)