From c4442e2741d85e556137eb25c4f048177405da39 Mon Sep 17 00:00:00 2001 From: Jean-Marie Mineau Date: Sun, 26 Feb 2023 12:43:14 +0100 Subject: [PATCH] fix lintting --- anagrams/src/lib.rs | 43 +++++++++++++++++++++++++------------------ web_gui/src/lib.rs | 23 +++++++++++------------ 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/anagrams/src/lib.rs b/anagrams/src/lib.rs index 9003efe..a6a82e4 100644 --- a/anagrams/src/lib.rs +++ b/anagrams/src/lib.rs @@ -20,7 +20,7 @@ impl Dict { let words: std::io::Result> = file .lines() .enumerate() - .filter_map(|(i, e)| (i != 0).then(|| e)) // Skip the first line ( = to size of the dict) + .filter_map(|(i, e)| (i != 0).then_some(e)) // Skip the first line ( = to size of the dict) .into_iter() .collect(); let words = words?; @@ -76,8 +76,8 @@ impl From<&Dict> for AnagramDict { fn from(dict: &Dict) -> Self { let mut map = Self { map: HashMap::>::new(), - nb_wild_cards: dict.nb_wild_cards.clone(), - wild_card_char: dict.wild_card_char.clone(), + nb_wild_cards: dict.nb_wild_cards, + wild_card_char: dict.wild_card_char, letters: HashSet::::new(), }; @@ -87,15 +87,16 @@ impl From<&Dict> for AnagramDict { let len = dict.words.len(); for word in dict.words.iter() { let freq = FrequencyHash::compute(word); - for char_ in word.chars() { + word.chars().for_each(|char_| { if char_ != map.wild_card_char { map.letters.insert(char_); } - } + }); map.add_word_with_wild_card(freq, word, dict.nb_wild_cards, dict.wild_card_char); #[cfg(not(target_arch = "wasm32"))] { + // Show avancement when running with a stding available i += 1; print!("{}%\r", (100 * i) / len); io::stdout().flush().unwrap(); @@ -116,15 +117,15 @@ impl AnagramDict { if freq.get_freq(self.wild_card_char) > self.nb_wild_cards { let mut result = vec![]; freq.remove_one_char(self.wild_card_char); - for char_ in self.letters.iter() { + self.letters.iter().for_each(|char_| { let mut freq = freq.clone(); - freq.add_one_char(char_.clone()); + freq.add_one_char(*char_); if let Some(anagrams) = self.find_freq(freq) { - for anagram in anagrams { - result.push(anagram); - } + anagrams + .iter() + .for_each(|anagram| result.push(anagram.clone())); } - } + }); if result.is_empty() { None } else { @@ -145,11 +146,11 @@ impl AnagramDict { self.map .entry(freq.clone()) .and_modify(|anagrams| anagrams.push(word.to_string())) - .or_insert(vec![word.to_string()]); + .or_insert_with(|| vec![word.to_string()]); if nb_wild_card != 0 { - for char_ in freq.0.clone().keys() { + for char_ in freq.0.keys() { let mut freq = freq.clone(); - freq.remove_one_char(char_.clone()); + freq.remove_one_char(*char_); freq.add_one_char(wild_card_symbole); self.add_word_with_wild_card(freq, word, nb_wild_card - 1, wild_card_symbole); } @@ -164,18 +165,18 @@ impl AnagramDict { /// We use the [`char`] type for simplicity. The initial problem was in ascii /// anyway, but keep in mind that [`char`]s are utf-8 scalar values, and in /// some alphabet those do not match characters. -#[derive(Debug, PartialEq, Eq, Clone)] +#[derive(Debug, Eq, Clone)] struct FrequencyHash(HashMap); impl FrequencyHash { /// Compute the [`FrequencyHash`] of a slice. fn compute(string: &str) -> Self { let mut map = HashMap::::new(); - for char_ in string.chars() { + string.chars().for_each(|char_| { map.entry(char_) .and_modify(|counter| *counter += 1) .or_insert(1); - } + }); Self(map) } @@ -209,7 +210,7 @@ impl FrequencyHash { /// Return the number of occurence of a char in the word fn get_freq(&self, char_: char) -> u8 { if let Some(freq) = self.0.get(&char_) { - freq.clone() + *freq } else { 0 } @@ -221,3 +222,9 @@ impl Hash for FrequencyHash { self.get_unique_vec().hash(state); } } + +impl PartialEq for FrequencyHash { + fn eq(&self, other: &Self) -> bool { + self.get_unique_vec() == other.get_unique_vec() + } +} diff --git a/web_gui/src/lib.rs b/web_gui/src/lib.rs index 17dc624..4c566bf 100644 --- a/web_gui/src/lib.rs +++ b/web_gui/src/lib.rs @@ -71,19 +71,18 @@ fn update_letters() { while let Some(child) = result.first_element_child() { child.remove(); } - DICTIONNARY + if let Some(anagrms) = DICTIONNARY .lock() .expect("Failed to access DICTIONNARY") .as_ref() - .map(|dict| dict.find(&val)) - .flatten() - .map(|anagrms| { - for anagram in anagrms { - let val = document().create_element("li").unwrap(); - val.set_text_content(Some(&anagram)); - result.append_child(&val).unwrap(); - } - }); + .and_then(|dict| dict.find(&val)) + { + for anagram in anagrms { + let val = document().create_element("li").unwrap(); + val.set_text_content(Some(&anagram)); + result.append_child(&val).unwrap(); + } + }; } fn load_dict(text: JsValue) { @@ -113,8 +112,8 @@ fn load_dict(text: JsValue) { // Called when the wasm module is instantiated #[wasm_bindgen(start)] fn main() -> Result<(), JsValue> { - let load_dict_c1 = Closure::::new(move |text: JsValue| load_dict(text)); - let load_dict_c2 = Closure::::new(move |text: JsValue| load_dict(text)); + let load_dict_c1 = Closure::::new(load_dict); + let load_dict_c2 = Closure::::new(load_dict); let update_dict = Closure::::new(move |event: Event| { display_spinner();