| #![allow(clippy::needless_pass_by_value, clippy::collapsible_if)] | |
| #![warn(clippy::map_entry)] | |
| use std::collections::HashMap; | |
| use std::hash::Hash; | |
| macro_rules! m { | |
| ($e:expr) => {{ $e }}; | |
| } | |
| macro_rules! insert { | |
| ($map:expr, $key:expr, $val:expr) => { | |
| $map.insert($key, $val) | |
| }; | |
| } | |
| mod issue13306 { | |
| use std::collections::HashMap; | |
| struct Env { | |
| enclosing: Option<Box<Env>>, | |
| values: HashMap<String, usize>, | |
| } | |
| impl Env { | |
| fn assign(&mut self, name: String, value: usize) -> bool { | |
| if !self.values.contains_key(&name) { | |
| //~^ map_entry | |
| self.values.insert(name, value); | |
| true | |
| } else if let Some(enclosing) = &mut self.enclosing { | |
| enclosing.assign(name, value) | |
| } else { | |
| false | |
| } | |
| } | |
| } | |
| } | |
| fn issue9925(mut hm: HashMap<String, bool>) { | |
| let key = "hello".to_string(); | |
| if hm.contains_key(&key) { | |
| //~^ map_entry | |
| let bval = hm.get_mut(&key).unwrap(); | |
| *bval = false; | |
| } else { | |
| hm.insert(key, true); | |
| } | |
| } | |
| mod issue9470 { | |
| use std::collections::HashMap; | |
| use std::sync::Mutex; | |
| struct Interner(i32); | |
| impl Interner { | |
| const fn new() -> Self { | |
| Interner(0) | |
| } | |
| fn resolve(&self, name: String) -> Option<String> { | |
| todo!() | |
| } | |
| } | |
| static INTERNER: Mutex<Interner> = Mutex::new(Interner::new()); | |
| struct VM { | |
| stack: Vec<i32>, | |
| globals: HashMap<String, i32>, | |
| } | |
| impl VM { | |
| fn stack_top(&self) -> &i32 { | |
| self.stack.last().unwrap() | |
| } | |
| fn resolve(&mut self, name: String, value: i32) -> Result<(), String> { | |
| if self.globals.contains_key(&name) { | |
| //~^ map_entry | |
| self.globals.insert(name, value); | |
| } else { | |
| let interner = INTERNER.lock().unwrap(); | |
| return Err(interner.resolve(name).unwrap().to_owned()); | |
| } | |
| Ok(()) | |
| } | |
| } | |
| } | |
| fn main() {} |