From c2d995b9e3ac7e3bbdb8b47531b865afcb074f12 Mon Sep 17 00:00:00 2001 From: sigoden Date: Thu, 23 Jan 2025 17:36:38 +0800 Subject: refactor: fuzzy filter REPL autocompletions (#1120) --- src/utils/mod.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/utils/mod.rs') diff --git a/src/utils/mod.rs b/src/utils/mod.rs index f4b98c1..7aa1801 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -119,8 +119,20 @@ pub fn convert_option_string(value: &str) -> Option { } } -pub fn fuzzy_match(choice: &str, pattern: &str) -> Option { - SkimMatcherV2::default().fuzzy_match(choice, pattern) +pub fn fuzzy_filter(values: Vec, get: F, pattern: &str) -> Vec +where + F: Fn(&T) -> &str, +{ + let matcher = SkimMatcherV2::default(); + let mut list: Vec<(T, i64)> = values + .into_iter() + .filter_map(|v| { + let score = matcher.fuzzy_match(get(&v), pattern)?; + Some((v, score)) + }) + .collect(); + list.sort_unstable_by(|a, b| b.1.cmp(&a.1)); + list.into_iter().map(|(v, _)| v).collect() } pub fn pretty_error(err: &anyhow::Error) -> String { -- cgit v1.2.3