diff options
author | David Knaack <davidkna@users.noreply.github.com> | 2021-04-06 22:12:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-06 22:12:37 +0200 |
commit | 8af677c8117beb52e0c419eff1ed5d0102c86ae3 (patch) | |
tree | 88793930f1e17f8e3f941ebeb79b0dbbd7932d66 /src | |
parent | a2cdc912e75852db6e45cd01f126a636937edcd9 (diff) |
feat(config): print a suggestion for unknown fields (#2560)
* feat(config): print a suggestion for unknown fields
* Fix typo
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/configs/starship_root.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/configs/starship_root.rs b/src/configs/starship_root.rs index 1c96cacd0..add0734ba 100644 --- a/src/configs/starship_root.rs +++ b/src/configs/starship_root.rs @@ -1,6 +1,7 @@ use crate::{config::ModuleConfig, module::ALL_MODULES}; use serde::Serialize; +use std::cmp::Ordering; // On changes please also update the `FullConfig` struct in `mod.rs` #[derive(Clone, Serialize)] @@ -100,6 +101,31 @@ impl<'a> ModuleConfig<'a> for StarshipRootConfig<'a> { unknown => { if !ALL_MODULES.contains(&unknown) && unknown != "custom" { log::warn!("Unknown config key '{}'", unknown); + + let did_you_mean = &[ + // Root options + "format", + "scan_timeout", + "command_timeout", + "add_newline", + // Modules + "custom", + ] + .iter() + .chain(ALL_MODULES.iter()) + .filter_map(|field| { + let score = strsim::jaro_winkler(unknown, field); + (score > 0.8).then(|| (score, field)) + }) + .max_by( + |(score_a, _field_a), (score_b, _field_b)| { + score_a.partial_cmp(score_b).unwrap_or(Ordering::Equal) + }, + ); + + if let Some((_score, field)) = did_you_mean { + log::warn!("Did you mean '{}'?", field); + } } } }); |