3 #![feature(custom_inner_attributes)]
8 clippy::mem_replace_option_with_none,
9 clippy::mem_replace_with_default
12 use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
15 fn replace_option_with_none() {
16 let mut an_option = Some(1);
17 let _ = an_option.take();
18 let an_option = &mut Some(1);
19 let _ = an_option.take();
22 fn replace_with_default() {
23 let mut s = String::from("foo");
24 let _ = std::mem::take(&mut s);
26 let s = &mut String::from("foo");
27 let _ = std::mem::take(s);
28 let _ = std::mem::take(s);
30 let mut v = vec![123];
31 let _ = std::mem::take(&mut v);
32 let _ = std::mem::take(&mut v);
33 let _ = std::mem::take(&mut v);
34 let _ = std::mem::take(&mut v);
36 let mut hash_map: HashMap<i32, i32> = HashMap::new();
37 let _ = std::mem::take(&mut hash_map);
39 let mut btree_map: BTreeMap<i32, i32> = BTreeMap::new();
40 let _ = std::mem::take(&mut btree_map);
42 let mut vd: VecDeque<i32> = VecDeque::new();
43 let _ = std::mem::take(&mut vd);
45 let mut hash_set: HashSet<&str> = HashSet::new();
46 let _ = std::mem::take(&mut hash_set);
48 let mut btree_set: BTreeSet<&str> = BTreeSet::new();
49 let _ = std::mem::take(&mut btree_set);
51 let mut list: LinkedList<i32> = LinkedList::new();
52 let _ = std::mem::take(&mut list);
54 let mut binary_heap: BinaryHeap<i32> = BinaryHeap::new();
55 let _ = std::mem::take(&mut binary_heap);
57 let mut tuple = (vec![1, 2], BinaryHeap::<i32>::new());
58 let _ = std::mem::take(&mut tuple);
60 let mut refstr = "hello";
61 let _ = std::mem::take(&mut refstr);
63 let mut slice: &[i32] = &[1, 2, 3];
64 let _ = std::mem::take(&mut slice);
67 // lint is disabled for primitives because in this case `take`
68 // has no clear benefit over `replace` and sometimes is harder to read
69 fn dont_lint_primitive() {
71 let _ = std::mem::replace(&mut pbool, false);
74 let _ = std::mem::replace(&mut pint, 0);
78 replace_option_with_none();
79 replace_with_default();
80 dont_lint_primitive();
84 #![clippy::msrv = "1.39"]
86 let mut s = String::from("foo");
87 let _ = std::mem::replace(&mut s, String::default());
91 #![clippy::msrv = "1.40"]
93 let mut s = String::from("foo");
94 let _ = std::mem::take(&mut s);