| #![warn(clippy::for_kv_map)] | |
| #![expect(clippy::used_underscore_binding)] | |
| use std::collections::*; | |
| use std::rc::Rc; | |
| fn main() { | |
| let m: HashMap<u64, u64> = HashMap::new(); | |
| for (_, v) in &m { | |
| //~^ for_kv_map | |
| let _v = v; | |
| } | |
| let m: Rc<HashMap<u64, u64>> = Rc::new(HashMap::new()); | |
| for (_, v) in &*m { | |
| //~^ for_kv_map | |
| let _v = v; | |
| // Here the `*` is not actually necessary, but the test tests that we don't | |
| // suggest | |
| // `in *m.values()` as we used to | |
| } | |
| let mut m: HashMap<u64, u64> = HashMap::new(); | |
| for (_, v) in &mut m { | |
| //~^ for_kv_map | |
| let _v = v; | |
| } | |
| let m: &mut HashMap<u64, u64> = &mut HashMap::new(); | |
| for (_, v) in &mut *m { | |
| //~^ for_kv_map | |
| let _v = v; | |
| } | |
| let m: HashMap<u64, u64> = HashMap::new(); | |
| let rm = &m; | |
| for (k, _value) in rm { | |
| //~^ for_kv_map | |
| let _k = k; | |
| } | |
| let m: HashMap<u64, u64> = HashMap::new(); | |
| let rm = &m; | |
| 'label: for (k, _value) in rm { | |
| //~^ for_kv_map | |
| let _k = k; | |
| if *k == 0u64 { | |
| break 'label; | |
| } | |
| } | |
| // The following should not produce warnings. | |
| let m: HashMap<u64, u64> = HashMap::new(); | |
| // No error, _value is actually used | |
| for (k, _value) in &m { | |
| let _ = _value; | |
| let _k = k; | |
| } | |
| let m: HashMap<u64, String> = Default::default(); | |
| for (_, v) in m { | |
| let _v = v; | |
| } | |
| } | |
| fn wrongly_unmangled_macros() { | |
| use std::collections::HashMap; | |
| macro_rules! test_map { | |
| ($val:expr) => { | |
| &*$val | |
| }; | |
| } | |
| let m: HashMap<u64, u64> = HashMap::new(); | |
| let wrapped = Rc::new(m); | |
| for (_, v) in test_map!(wrapped) { | |
| //~^ for_kv_map | |
| let _v = v; | |
| } | |
| } | |
| fn issue16822(mut x: HashMap<usize, usize>) { | |
| for (_, v) in x.iter() { | |
| //~^ for_kv_map | |
| println!("{}", v); | |
| } | |
| for (_, v) in x.iter_mut() { | |
| //~^ for_kv_map | |
| *v += 1; | |
| } | |
| for (k, _) in x.iter() { | |
| //~^ for_kv_map | |
| println!("{}", k); | |
| } | |
| for (k, _) in x.iter_mut() { | |
| //~^ for_kv_map | |
| println!("{}", k); | |
| } | |
| } |