]>
Commit | Line | Data |
---|---|---|
2b03887a | 1 | #![allow(unused)] |
f20569fa XL |
2 | #![warn( |
3 | clippy::all, | |
4 | clippy::style, | |
5 | clippy::mem_replace_option_with_none, | |
6 | clippy::mem_replace_with_default | |
7 | )] | |
8 | ||
cdc7bbd5 | 9 | use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque}; |
f20569fa XL |
10 | use std::mem; |
11 | ||
12 | fn replace_option_with_none() { | |
13 | let mut an_option = Some(1); | |
14 | let _ = an_option.take(); | |
15 | let an_option = &mut Some(1); | |
16 | let _ = an_option.take(); | |
17 | } | |
18 | ||
19 | fn replace_with_default() { | |
20 | let mut s = String::from("foo"); | |
21 | let _ = std::mem::take(&mut s); | |
cdc7bbd5 | 22 | |
f20569fa XL |
23 | let s = &mut String::from("foo"); |
24 | let _ = std::mem::take(s); | |
25 | let _ = std::mem::take(s); | |
cdc7bbd5 XL |
26 | |
27 | let mut v = vec![123]; | |
28 | let _ = std::mem::take(&mut v); | |
29 | let _ = std::mem::take(&mut v); | |
30 | let _ = std::mem::take(&mut v); | |
31 | let _ = std::mem::take(&mut v); | |
32 | ||
33 | let mut hash_map: HashMap<i32, i32> = HashMap::new(); | |
34 | let _ = std::mem::take(&mut hash_map); | |
35 | ||
36 | let mut btree_map: BTreeMap<i32, i32> = BTreeMap::new(); | |
37 | let _ = std::mem::take(&mut btree_map); | |
38 | ||
39 | let mut vd: VecDeque<i32> = VecDeque::new(); | |
40 | let _ = std::mem::take(&mut vd); | |
41 | ||
42 | let mut hash_set: HashSet<&str> = HashSet::new(); | |
43 | let _ = std::mem::take(&mut hash_set); | |
44 | ||
45 | let mut btree_set: BTreeSet<&str> = BTreeSet::new(); | |
46 | let _ = std::mem::take(&mut btree_set); | |
47 | ||
48 | let mut list: LinkedList<i32> = LinkedList::new(); | |
49 | let _ = std::mem::take(&mut list); | |
50 | ||
51 | let mut binary_heap: BinaryHeap<i32> = BinaryHeap::new(); | |
52 | let _ = std::mem::take(&mut binary_heap); | |
c295e0f8 XL |
53 | |
54 | let mut tuple = (vec![1, 2], BinaryHeap::<i32>::new()); | |
55 | let _ = std::mem::take(&mut tuple); | |
56 | ||
57 | let mut refstr = "hello"; | |
58 | let _ = std::mem::take(&mut refstr); | |
59 | ||
60 | let mut slice: &[i32] = &[1, 2, 3]; | |
61 | let _ = std::mem::take(&mut slice); | |
62 | } | |
63 | ||
64 | // lint is disabled for primitives because in this case `take` | |
65 | // has no clear benefit over `replace` and sometimes is harder to read | |
66 | fn dont_lint_primitive() { | |
67 | let mut pbool = true; | |
68 | let _ = std::mem::replace(&mut pbool, false); | |
69 | ||
70 | let mut pint = 5; | |
71 | let _ = std::mem::replace(&mut pint, 0); | |
f20569fa XL |
72 | } |
73 | ||
74 | fn main() { | |
75 | replace_option_with_none(); | |
76 | replace_with_default(); | |
c295e0f8 | 77 | dont_lint_primitive(); |
f20569fa | 78 | } |
2b03887a | 79 | |
487cf647 | 80 | #[clippy::msrv = "1.39"] |
2b03887a | 81 | fn msrv_1_39() { |
2b03887a FG |
82 | let mut s = String::from("foo"); |
83 | let _ = std::mem::replace(&mut s, String::default()); | |
84 | } | |
85 | ||
487cf647 | 86 | #[clippy::msrv = "1.40"] |
2b03887a | 87 | fn msrv_1_40() { |
2b03887a FG |
88 | let mut s = String::from("foo"); |
89 | let _ = std::mem::take(&mut s); | |
90 | } | |
353b0b11 FG |
91 | |
92 | fn issue9824() { | |
93 | struct Foo<'a>(Option<&'a str>); | |
94 | impl<'a> std::ops::Deref for Foo<'a> { | |
95 | type Target = Option<&'a str>; | |
96 | ||
97 | fn deref(&self) -> &Self::Target { | |
98 | &self.0 | |
99 | } | |
100 | } | |
101 | impl<'a> std::ops::DerefMut for Foo<'a> { | |
102 | fn deref_mut(&mut self) -> &mut Self::Target { | |
103 | &mut self.0 | |
104 | } | |
105 | } | |
106 | ||
107 | struct Bar { | |
108 | opt: Option<u8>, | |
109 | val: String, | |
110 | } | |
111 | ||
112 | let mut f = Foo(Some("foo")); | |
113 | let mut b = Bar { | |
114 | opt: Some(1), | |
115 | val: String::from("bar"), | |
116 | }; | |
117 | ||
118 | // replace option with none | |
119 | let _ = f.0.take(); | |
120 | let _ = (*f).take(); | |
121 | let _ = b.opt.take(); | |
122 | // replace with default | |
123 | let _ = std::mem::take(&mut b.val); | |
124 | } |