]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/map_clone.rs
Merge remote-tracking branch 'origin/beta_backport' into HEAD
[rust.git] / tests / ui / map_clone.rs
index 90c95be2c1c1cfbb1a4d2d8660a2fd946b8e4f42..5f216823eb4a959066f5a85fb298677844a2ab96 100644 (file)
-#![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() { }