]> git.proxmox.com Git - rustc.git/blob - src/tools/clippy/tests/ui/mem_replace.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / mem_replace.rs
1 // run-rustfix
2
3 #![feature(custom_inner_attributes)]
4 #![allow(unused)]
5 #![warn(
6 clippy::all,
7 clippy::style,
8 clippy::mem_replace_option_with_none,
9 clippy::mem_replace_with_default
10 )]
11
12 use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
13 use std::mem;
14
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);
20 }
21
22 fn replace_with_default() {
23 let mut s = String::from("foo");
24 let _ = std::mem::replace(&mut s, String::default());
25
26 let s = &mut String::from("foo");
27 let _ = std::mem::replace(s, String::default());
28 let _ = std::mem::replace(s, Default::default());
29
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![]);
35
36 let mut hash_map: HashMap<i32, i32> = HashMap::new();
37 let _ = std::mem::replace(&mut hash_map, HashMap::new());
38
39 let mut btree_map: BTreeMap<i32, i32> = BTreeMap::new();
40 let _ = std::mem::replace(&mut btree_map, BTreeMap::new());
41
42 let mut vd: VecDeque<i32> = VecDeque::new();
43 let _ = std::mem::replace(&mut vd, VecDeque::new());
44
45 let mut hash_set: HashSet<&str> = HashSet::new();
46 let _ = std::mem::replace(&mut hash_set, HashSet::new());
47
48 let mut btree_set: BTreeSet<&str> = BTreeSet::new();
49 let _ = std::mem::replace(&mut btree_set, BTreeSet::new());
50
51 let mut list: LinkedList<i32> = LinkedList::new();
52 let _ = std::mem::replace(&mut list, LinkedList::new());
53
54 let mut binary_heap: BinaryHeap<i32> = BinaryHeap::new();
55 let _ = std::mem::replace(&mut binary_heap, BinaryHeap::new());
56
57 let mut tuple = (vec![1, 2], BinaryHeap::<i32>::new());
58 let _ = std::mem::replace(&mut tuple, (vec![], BinaryHeap::new()));
59
60 let mut refstr = "hello";
61 let _ = std::mem::replace(&mut refstr, "");
62
63 let mut slice: &[i32] = &[1, 2, 3];
64 let _ = std::mem::replace(&mut slice, &[]);
65 }
66
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() {
70 let mut pbool = true;
71 let _ = std::mem::replace(&mut pbool, false);
72
73 let mut pint = 5;
74 let _ = std::mem::replace(&mut pint, 0);
75 }
76
77 fn main() {
78 replace_option_with_none();
79 replace_with_default();
80 dont_lint_primitive();
81 }
82
83 fn msrv_1_39() {
84 #![clippy::msrv = "1.39"]
85
86 let mut s = String::from("foo");
87 let _ = std::mem::replace(&mut s, String::default());
88 }
89
90 fn msrv_1_40() {
91 #![clippy::msrv = "1.40"]
92
93 let mut s = String::from("foo");
94 let _ = std::mem::replace(&mut s, String::default());
95 }