]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/mem_replace.rs
Auto merge of #105140 - flip1995:clippyup, r=Manishearth
[rust.git] / src / tools / clippy / tests / ui / mem_replace.rs
1 // run-rustfix
2
3 #![allow(unused)]
4 #![warn(
5     clippy::all,
6     clippy::style,
7     clippy::mem_replace_option_with_none,
8     clippy::mem_replace_with_default
9 )]
10
11 use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
12 use std::mem;
13
14 fn replace_option_with_none() {
15     let mut an_option = Some(1);
16     let _ = mem::replace(&mut an_option, None);
17     let an_option = &mut Some(1);
18     let _ = mem::replace(an_option, None);
19 }
20
21 fn replace_with_default() {
22     let mut s = String::from("foo");
23     let _ = std::mem::replace(&mut s, String::default());
24
25     let s = &mut String::from("foo");
26     let _ = std::mem::replace(s, String::default());
27     let _ = std::mem::replace(s, Default::default());
28
29     let mut v = vec![123];
30     let _ = std::mem::replace(&mut v, Vec::default());
31     let _ = std::mem::replace(&mut v, Default::default());
32     let _ = std::mem::replace(&mut v, Vec::new());
33     let _ = std::mem::replace(&mut v, vec![]);
34
35     let mut hash_map: HashMap<i32, i32> = HashMap::new();
36     let _ = std::mem::replace(&mut hash_map, HashMap::new());
37
38     let mut btree_map: BTreeMap<i32, i32> = BTreeMap::new();
39     let _ = std::mem::replace(&mut btree_map, BTreeMap::new());
40
41     let mut vd: VecDeque<i32> = VecDeque::new();
42     let _ = std::mem::replace(&mut vd, VecDeque::new());
43
44     let mut hash_set: HashSet<&str> = HashSet::new();
45     let _ = std::mem::replace(&mut hash_set, HashSet::new());
46
47     let mut btree_set: BTreeSet<&str> = BTreeSet::new();
48     let _ = std::mem::replace(&mut btree_set, BTreeSet::new());
49
50     let mut list: LinkedList<i32> = LinkedList::new();
51     let _ = std::mem::replace(&mut list, LinkedList::new());
52
53     let mut binary_heap: BinaryHeap<i32> = BinaryHeap::new();
54     let _ = std::mem::replace(&mut binary_heap, BinaryHeap::new());
55
56     let mut tuple = (vec![1, 2], BinaryHeap::<i32>::new());
57     let _ = std::mem::replace(&mut tuple, (vec![], BinaryHeap::new()));
58
59     let mut refstr = "hello";
60     let _ = std::mem::replace(&mut refstr, "");
61
62     let mut slice: &[i32] = &[1, 2, 3];
63     let _ = std::mem::replace(&mut slice, &[]);
64 }
65
66 // lint is disabled for primitives because in this case `take`
67 // has no clear benefit over `replace` and sometimes is harder to read
68 fn dont_lint_primitive() {
69     let mut pbool = true;
70     let _ = std::mem::replace(&mut pbool, false);
71
72     let mut pint = 5;
73     let _ = std::mem::replace(&mut pint, 0);
74 }
75
76 fn main() {
77     replace_option_with_none();
78     replace_with_default();
79     dont_lint_primitive();
80 }
81
82 #[clippy::msrv = "1.39"]
83 fn msrv_1_39() {
84     let mut s = String::from("foo");
85     let _ = std::mem::replace(&mut s, String::default());
86 }
87
88 #[clippy::msrv = "1.40"]
89 fn msrv_1_40() {
90     let mut s = String::from("foo");
91     let _ = std::mem::replace(&mut s, String::default());
92 }