summaryrefslogtreecommitdiffstats
path: root/src/utils
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2025-01-23 09:46:25 +0800
committerGitHub <noreply@github.com>2025-01-23 09:46:25 +0800
commit7567478754bfbc4b103b692c6b1574f80a8b453f (patch)
tree9cd9d2665710d26d1a0b957ac2d74dfd10dd0498 /src/utils
parent5defd0bdb0e68ca26da575c88116313cd48e290d (diff)
downloadaichat-7567478754bfbc4b103b692c6b1574f80a8b453f.tar.gz
refactor: sort repl autocompletion items by fuzzy-match score (#1119)
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/mod.rs25
1 files changed, 3 insertions, 22 deletions
diff --git a/src/utils/mod.rs b/src/utils/mod.rs
index 8d66470..f4b98c1 100644
--- a/src/utils/mod.rs
+++ b/src/utils/mod.rs
@@ -24,6 +24,7 @@ pub use self::variables::*;
use anyhow::{Context, Result};
use fancy_regex::Regex;
+use fuzzy_matcher::{skim::SkimMatcherV2, FuzzyMatcher};
use is_terminal::IsTerminal;
use std::{env, path::PathBuf, process};
use unicode_segmentation::UnicodeSegmentation;
@@ -118,21 +119,8 @@ pub fn convert_option_string(value: &str) -> Option<String> {
}
}
-pub fn fuzzy_match(text: &str, pattern: &str) -> bool {
- let text_chars: Vec<char> = text.chars().collect();
- let pattern_chars: Vec<char> = pattern.chars().collect();
-
- let mut pattern_index = 0;
- let mut text_index = 0;
-
- while pattern_index < pattern_chars.len() && text_index < text_chars.len() {
- if pattern_chars[pattern_index] == text_chars[text_index] {
- pattern_index += 1;
- }
- text_index += 1;
- }
-
- pattern_index == pattern_chars.len()
+pub fn fuzzy_match(choice: &str, pattern: &str) -> Option<i64> {
+ SkimMatcherV2::default().fuzzy_match(choice, pattern)
}
pub fn pretty_error(err: &anyhow::Error) -> String {
@@ -235,13 +223,6 @@ mod tests {
use super::*;
#[test]
- fn test_fuzzy_match() {
- assert!(fuzzy_match("openai:gpt-4-turbo", "gpt4"));
- assert!(fuzzy_match("openai:gpt-4-turbo", "oai4"));
- assert!(!fuzzy_match("openai:gpt-4-turbo", "4gpt"));
- }
-
- #[test]
#[cfg(not(target_os = "windows"))]
fn test_safe_join_path() {
assert_eq!(