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 _
= mem
::replace(&mut an_option
, None
);
18 let an_option
= &mut Some(1);
19 let _
= mem
::replace(an_option
, None
);
22 fn replace_with_default() {
23 let mut s
= String
::from("foo");
24 let _
= std
::mem
::replace(&mut s
, String
::default());
26 let s
= &mut String
::from("foo");
27 let _
= std
::mem
::replace(s
, String
::default());
28 let _
= std
::mem
::replace(s
, Default
::default());
30 let mut v
= vec
![123];
31 let _
= std
::mem
::replace(&mut v
, Vec
::default());
32 let _
= std
::mem
::replace(&mut v
, Default
::default());
33 let _
= std
::mem
::replace(&mut v
, Vec
::new());
34 let _
= std
::mem
::replace(&mut v
, vec
![]);
36 let mut hash_map
: HashMap
<i32, i32> = HashMap
::new();
37 let _
= std
::mem
::replace(&mut hash_map
, HashMap
::new());
39 let mut btree_map
: BTreeMap
<i32, i32> = BTreeMap
::new();
40 let _
= std
::mem
::replace(&mut btree_map
, BTreeMap
::new());
42 let mut vd
: VecDeque
<i32> = VecDeque
::new();
43 let _
= std
::mem
::replace(&mut vd
, VecDeque
::new());
45 let mut hash_set
: HashSet
<&str> = HashSet
::new();
46 let _
= std
::mem
::replace(&mut hash_set
, HashSet
::new());
48 let mut btree_set
: BTreeSet
<&str> = BTreeSet
::new();
49 let _
= std
::mem
::replace(&mut btree_set
, BTreeSet
::new());
51 let mut list
: LinkedList
<i32> = LinkedList
::new();
52 let _
= std
::mem
::replace(&mut list
, LinkedList
::new());
54 let mut binary_heap
: BinaryHeap
<i32> = BinaryHeap
::new();
55 let _
= std
::mem
::replace(&mut binary_heap
, BinaryHeap
::new());
57 let mut tuple
= (vec
![1, 2], BinaryHeap
::<i32>::new());
58 let _
= std
::mem
::replace(&mut tuple
, (vec
![], BinaryHeap
::new()));
60 let mut refstr
= "hello";
61 let _
= std
::mem
::replace(&mut refstr
, "");
63 let mut slice
: &[i32] = &[1, 2, 3];
64 let _
= std
::mem
::replace(&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
::replace(&mut s
, String
::default());