-#![feature(tool_lints)]
-
-
-#![warn(clippy::map_clone)]
-
-#![allow(clippy::clone_on_copy, unused)]
-
-use std::ops::Deref;
-
-fn map_clone_iter() {
- let x = [1,2,3];
- x.iter().map(|y| y.clone());
-
- x.iter().map(|&y| y);
-
- x.iter().map(|y| *y);
-
- x.iter().map(|y| { y.clone() });
-
- x.iter().map(|&y| { y });
-
- x.iter().map(|y| { *y });
-
- x.iter().map(Clone::clone);
-
-}
-
-fn map_clone_option() {
- let x = Some(4);
- x.as_ref().map(|y| y.clone());
-
- x.as_ref().map(|&y| y);
-
- x.as_ref().map(|y| *y);
-
-}
-
-fn not_linted_option() {
- let x = Some(5);
-
- // Not linted: other statements
- x.as_ref().map(|y| {
- println!("y: {}", y);
- y.clone()
- });
-
- // Not linted: argument bindings
- let x = Some((6, 7));
- x.map(|(y, _)| y.clone());
-
- // Not linted: cloning something else
- x.map(|y| y.0.clone());
-
- // Not linted: no dereferences
- x.map(|y| y);
-
- // Not linted: multiple dereferences
- let _: Option<(i32, i32)> = x.as_ref().as_ref().map(|&&x| x);
-}
-
-#[derive(Copy, Clone)]
-struct Wrapper<T>(T);
-impl<T> Wrapper<T> {
- fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Wrapper<U> {
- Wrapper(f(self.0))
- }
-}
-
-fn map_clone_other() {
- let eight = 8;
- let x = Wrapper(&eight);
-
- // Not linted: not a linted type
- x.map(|y| y.clone());
- x.map(|&y| y);
- x.map(|y| *y);
-}
-
-#[derive(Copy, Clone)]
-struct UnusualDeref;
-static NINE: i32 = 9;
-
-impl Deref for UnusualDeref {
- type Target = i32;
- fn deref(&self) -> &i32 { &NINE }
-}
-
-fn map_clone_deref() {
- let x = Some(UnusualDeref);
- let _: Option<UnusualDeref> = x.as_ref().map(|y| *y);
-
-
- // Not linted: using deref conversion
- let _: Option<i32> = x.map(|y| *y);
-
- // Not linted: using regular deref but also deref conversion
- let _: Option<i32> = x.as_ref().map(|y| **y);
+// run-rustfix
+#![warn(clippy::all, clippy::pedantic)]
+#![allow(clippy::iter_cloned_collect)]
+#![allow(clippy::clone_on_copy)]
+#![allow(clippy::missing_docs_in_private_items)]
+#![allow(clippy::redundant_closure_for_method_calls)]
+
+fn main() {
+ let _: Vec<i8> = vec![5_i8; 6].iter().map(|x| *x).collect();
+ let _: Vec<String> = vec![String::new()].iter().map(|x| x.clone()).collect();
+ let _: Vec<u32> = vec![42, 43].iter().map(|&x| x).collect();
+ let _: Option<u64> = Some(Box::new(16)).map(|b| *b);
+ let _: Option<u64> = Some(&16).map(|b| *b);
+ let _: Option<u8> = Some(&1).map(|x| x.clone());
+
+ // Don't lint these
+ let v = vec![5_i8; 6];
+ let a = 0;
+ let b = &a;
+ let _ = v.iter().map(|_x| *b);
+ let _ = v.iter().map(|_x| a.clone());
+ let _ = v.iter().map(|&_x| a);
+
+ // Issue #498
+ let _ = std::env::args().map(|v| v.clone());
}
-
-// stuff that used to be a false positive
-fn former_false_positive() {
- vec![1].iter_mut().map(|x| *x); // #443
-}
-
-fn main() { }