mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-27 23:20:39 +00:00
67a9f20c91
`cloned` requires that the elements of the iterator must be references. This change determines if that is the case by examining the type of the closure argument and suggesting `.cloned` only if it is a reference. When the closure argument is not a reference, it suggests removing the `map` call instead. A minor problem with this change is that the new check sometimes overlaps with the `clone_on_copy` lint. Fixes #498
28 lines
1.3 KiB
Text
28 lines
1.3 KiB
Text
error: You are using an explicit closure for cloning elements
|
|
--> $DIR/map_clone.rs:8:22
|
|
|
|
|
LL | let _: Vec<i8> = vec![5_i8; 6].iter().map(|x| *x).collect();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vec![5_i8; 6].iter().cloned()`
|
|
|
|
|
= note: `-D clippy::map-clone` implied by `-D warnings`
|
|
|
|
error: You are using an explicit closure for cloning elements
|
|
--> $DIR/map_clone.rs:9:26
|
|
|
|
|
LL | let _: Vec<String> = vec![String::new()].iter().map(|x| x.clone()).collect();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vec![String::new()].iter().cloned()`
|
|
|
|
error: You are using an explicit closure for cloning elements
|
|
--> $DIR/map_clone.rs:10:23
|
|
|
|
|
LL | let _: Vec<u32> = vec![42, 43].iter().map(|&x| x).collect();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vec![42, 43].iter().cloned()`
|
|
|
|
error: You are needlessly cloning iterator elements
|
|
--> $DIR/map_clone.rs:22:29
|
|
|
|
|
LL | let _ = std::env::args().map(|v| v.clone());
|
|
| ^^^^^^^^^^^^^^^^^^^ help: Remove the map call
|
|
|
|
error: aborting due to 4 previous errors
|
|
|