1// run-rustfix 2#![allow(unused_mut, clippy::from_iter_instead_of_collect)] 3#![deny(clippy::get_unwrap)] 4 5use std::collections::BTreeMap; 6use std::collections::HashMap; 7use std::collections::VecDeque; 8use std::iter::FromIterator; 9 10struct GetFalsePositive { 11 arr: [u32; 3], 12} 13 14impl GetFalsePositive { 15 fn get(&self, pos: usize) -> Option<&u32> { 16 self.arr.get(pos) 17 } 18 fn get_mut(&mut self, pos: usize) -> Option<&mut u32> { 19 self.arr.get_mut(pos) 20 } 21} 22 23fn main() { 24 let mut boxed_slice: Box<[u8]> = Box::new([0, 1, 2, 3]); 25 let mut some_slice = &mut [0, 1, 2, 3]; 26 let mut some_vec = vec![0, 1, 2, 3]; 27 let mut some_vecdeque: VecDeque<_> = some_vec.iter().cloned().collect(); 28 let mut some_hashmap: HashMap<u8, char> = HashMap::from_iter(vec![(1, 'a'), (2, 'b')]); 29 let mut some_btreemap: BTreeMap<u8, char> = BTreeMap::from_iter(vec![(1, 'a'), (2, 'b')]); 30 let mut false_positive = GetFalsePositive { arr: [0, 1, 2] }; 31 32 { 33 // Test `get().unwrap()` 34 let _ = &boxed_slice[1]; 35 let _ = &some_slice[0]; 36 let _ = &some_vec[0]; 37 let _ = &some_vecdeque[0]; 38 let _ = &some_hashmap[&1]; 39 let _ = &some_btreemap[&1]; 40 let _ = false_positive.get(0).unwrap(); 41 // Test with deref 42 let _: u8 = boxed_slice[1]; 43 } 44 45 { 46 // Test `get_mut().unwrap()` 47 boxed_slice[0] = 1; 48 some_slice[0] = 1; 49 some_vec[0] = 1; 50 some_vecdeque[0] = 1; 51 // Check false positives 52 *some_hashmap.get_mut(&1).unwrap() = 'b'; 53 *some_btreemap.get_mut(&1).unwrap() = 'b'; 54 *false_positive.get_mut(0).unwrap() = 1; 55 } 56 57 { 58 // Test `get().unwrap().foo()` and `get_mut().unwrap().bar()` 59 let _ = some_vec[0..1].to_vec(); 60 let _ = some_vec[0..1].to_vec(); 61 } 62} 63