Compare commits
2 Commits
849bc8a5f2
...
3b2641dd14
Author | SHA1 | Date | |
---|---|---|---|
|
3b2641dd14 | ||
39e1fea36f |
18
CHANGELOG.md
18
CHANGELOG.md
@ -6,6 +6,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.2.1] - 2024-09-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- implement naive fuzzy matcher
|
||||||
|
|
||||||
|
### Other
|
||||||
|
- refactor fuzzy match into own function
|
||||||
|
- cleanup warnings
|
||||||
|
- move fuzzy search out of command
|
||||||
|
- refactor/matcher move to a separate file
|
||||||
|
|
||||||
|
- move fuzzy search out of command
|
||||||
|
- Actually add fuzzy matcher
|
||||||
|
|
||||||
|
- extract matcher
|
||||||
|
- update dependencies
|
||||||
|
- *(deps)* update rust crate anyhow to v1.0.89
|
||||||
|
|
||||||
## [0.2.0] - 2024-09-14
|
## [0.2.0] - 2024-09-14
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
@ -3,7 +3,7 @@ members = ["crates/*"]
|
|||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
gitnow = { path = "crates/gitnow" }
|
gitnow = { path = "crates/gitnow" }
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
app::App, cache::CacheApp, fuzzy_matcher::FuzzyMatcherApp, projects_list::ProjectsListApp,
|
app::App,
|
||||||
|
cache::CacheApp,
|
||||||
|
fuzzy_matcher::{FuzzyMatcher, FuzzyMatcherApp},
|
||||||
|
git_provider::Repository,
|
||||||
|
projects_list::ProjectsListApp,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
@ -31,16 +37,11 @@ impl RootCommand {
|
|||||||
None => todo!(),
|
None => todo!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let haystack = repositories
|
let matched_repos = self
|
||||||
.iter()
|
.app
|
||||||
.map(|r| r.to_rel_path().display().to_string())
|
.fuzzy_matcher()
|
||||||
.collect::<Vec<_>>();
|
.match_repositories(&needle, &repositories);
|
||||||
|
let res = matched_repos.iter().take(10).rev().collect::<Vec<_>>();
|
||||||
let haystack = haystack.as_str_vec();
|
|
||||||
|
|
||||||
let res = self.app.fuzzy_matcher().match_pattern(&needle, &haystack);
|
|
||||||
|
|
||||||
let res = res.iter().take(10).rev().collect::<Vec<_>>();
|
|
||||||
|
|
||||||
for repo in res {
|
for repo in res {
|
||||||
tracing::debug!("repo: {:?}", repo);
|
tracing::debug!("repo: {:?}", repo);
|
||||||
@ -61,3 +62,33 @@ impl StringExt for Vec<String> {
|
|||||||
self.iter().map(|r| r.as_ref()).collect()
|
self.iter().map(|r| r.as_ref()).collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl StringExt for Vec<&String> {
|
||||||
|
fn as_str_vec(&self) -> Vec<&str> {
|
||||||
|
self.iter().map(|r| r.as_ref()).collect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait RepositoryMatcher {
|
||||||
|
fn match_repositories(&self, pattern: &str, repositories: &[Repository]) -> Vec<Repository>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RepositoryMatcher for FuzzyMatcher {
|
||||||
|
fn match_repositories(&self, pattern: &str, repositories: &[Repository]) -> Vec<Repository> {
|
||||||
|
let haystack = repositories
|
||||||
|
.iter()
|
||||||
|
.map(|r| (r.to_rel_path().display().to_string(), r))
|
||||||
|
.collect::<BTreeMap<_, _>>();
|
||||||
|
let haystack_keys = haystack.keys().collect::<Vec<_>>();
|
||||||
|
let haystack_keys = haystack_keys.as_str_vec();
|
||||||
|
|
||||||
|
let res = self.match_pattern(pattern, &haystack_keys);
|
||||||
|
|
||||||
|
let matched_repos = res
|
||||||
|
.into_iter()
|
||||||
|
.filter_map(|repo_key| haystack.get(repo_key).map(|r| (*r).to_owned()))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
matched_repos
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user