From c10843140b443294678ad1fff2c22e8a1e4f95b7 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Thu, 7 Apr 2022 08:47:00 -0400 Subject: [PATCH] code improvements --- src/misc.rs | 13 ++++++------- src/suggestions.rs | 38 ++++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/misc.rs b/src/misc.rs index 560e7e5..6c0335f 100644 --- a/src/misc.rs +++ b/src/misc.rs @@ -311,15 +311,14 @@ where .map(|x| { x.as_ref() .map(|x_1| x_1.to_string()) - .unwrap_or("None".to_string()) + .unwrap_or_else(|| "None".to_string()) }) .enumerate() .map(|(i, x)| { // Add comma and space if needed - if max_i > i as i32 { - return x + ", "; - } else { - return x; + match max_i > i as i32 { + true => x + ", ", + false => x, } }) .collect::>() @@ -347,11 +346,11 @@ pub fn chars_take(chars: &[char], take: usize) -> String { match take { 0 => { // return empty string if `take == 0` - return String::new(); + String::new() } 1 => { // return last character as a string if take == 1 - return chars[len - 1].to_string(); + chars[len - 1].to_string() } _ if take == len => { // return `chars` turned into a string if `take == len` diff --git a/src/suggestions.rs b/src/suggestions.rs index 6a4eb4c..6ca7b85 100644 --- a/src/suggestions.rs +++ b/src/suggestions.rs @@ -44,30 +44,15 @@ impl std::fmt::Debug for HintEnum<'static> { } } +// TODO: implement `core::fmt::Display` instead impl ToString for HintEnum<'static> { fn to_string(&self) -> String { match self { HintEnum::Single(single_data) => single_data.to_string(), HintEnum::Many(multi_data) => { - let max_i: i32 = (multi_data.len() as i32) - 1; - - "[".to_owned() - + &multi_data - .iter() - .map(|x| r#"""#.to_string() + x + r#"""#) - .enumerate() - .map(|(i, x)| { - // Add comma and space if needed - if max_i > i as i32 { - return x + ", "; - } else { - return x; - } - }) - .collect::>() - .concat() + "]" + format!("{:?}", multi_data) } - HintEnum::None => String::new(), + HintEnum::None => String::from("None"), } } } @@ -114,4 +99,21 @@ mod tests { assert_eq!(generate_hint(key), value); } } + + #[test] + fn hint_to_string_test() { + let values = HashMap::from([ + ("x^2", HintEnum::Single("x^2")), + ( + r#"["n(", "nh(", "gnum("]"#, + HintEnum::Many(&["n(", "nh(", "gnum("]), + ), + (r#"["n("]"#, HintEnum::Many(&["n("])), + ("None", HintEnum::None), + ]); + + for (key, value) in values { + assert_eq!(value.to_string(), key); + } + } }