summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Knaack <davidkna@users.noreply.github.com>2021-04-06 22:12:37 +0200
committerGitHub <noreply@github.com>2021-04-06 22:12:37 +0200
commit8af677c8117beb52e0c419eff1ed5d0102c86ae3 (patch)
tree88793930f1e17f8e3f941ebeb79b0dbbd7932d66 /src
parenta2cdc912e75852db6e45cd01f126a636937edcd9 (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.rs26
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);
+ }
}
}
});