diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ef5d50..27695ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## unreleased + +* sort dependencies and packages alphabetically if no filter is set + ## 0.7.1 * make `*` as a version be a wildcard for `any` - always find prerelease versions diff --git a/src/dependencies/dependency.rs b/src/dependencies/dependency.rs index 2756115..e95628e 100644 --- a/src/dependencies/dependency.rs +++ b/src/dependencies/dependency.rs @@ -66,15 +66,13 @@ impl Dependency { } pub fn get_features_filtered_view(&self, filter: &str) -> Vec { - let features: Vec<(&String, &FeatureData)> = self + let features = self .features .iter() - .filter(|feature| feature.0 != "default") - .collect(); + .filter(|feature| feature.0 != "default"); if filter.is_empty() { features - .iter() .sorted_by(|(name_a, data_a), (name_b, data_b)| { if data_a.is_default && !data_b.is_default { return Ordering::Less; @@ -92,7 +90,6 @@ impl Dependency { let matcher = SkimMatcherV2::default(); features - .iter() .filter_map(|(name, _)| matcher.fuzzy(name, filter, true).map(|some| (name, some))) .sorted_by(|(_, fuzzy_a), (_, fuzzy_b)| fuzzy_a.0.cmp(&fuzzy_b.0).reverse()) .map(|(name, fuzzy)| (name, fuzzy.1)) diff --git a/src/document.rs b/src/document.rs index 406a5d7..4fd7784 100644 --- a/src/document.rs +++ b/src/document.rs @@ -107,22 +107,29 @@ impl Document { } pub fn get_package_names_filtered_view(&self, filter: &str) -> Result> { - let matcher = SkimMatcherV2::default(); - - let deps = self - .packages - .iter() - .filter_map(|package| { - matcher - .fuzzy(&package.name, filter, true) - .map(|fuzzy_result| (package, fuzzy_result)) - }) - .sorted_by(|(_, fuzzy_a), (_, fuzzy_b)| fuzzy_a.0.cmp(&fuzzy_b.0).reverse()) - .map(|(package, fuzzy)| (package, fuzzy.1)) - .map(|(package, indexes)| SelectorItem::from_package(package, indexes)) - .collect(); + let packages = if filter.is_empty() { + self.packages + .iter() + .sorted_by(|package_a, package_b| package_a.name.cmp(&package_b.name)) + .map(|package| SelectorItem::from_package(package, vec![])) + .collect() + } else { + let matcher = SkimMatcherV2::default(); + + self.packages + .iter() + .filter_map(|package| { + matcher + .fuzzy(&package.name, filter, true) + .map(|fuzzy_result| (package, fuzzy_result)) + }) + .sorted_by(|(_, fuzzy_a), (_, fuzzy_b)| fuzzy_a.0.cmp(&fuzzy_b.0).reverse()) + .map(|(package, fuzzy)| (package, fuzzy.1)) + .map(|(package, indexes)| SelectorItem::from_package(package, indexes)) + .collect() + }; - Ok(deps) + Ok(packages) } pub fn get_packages_names(&self) -> Vec { @@ -157,20 +164,27 @@ impl Document { } pub fn get_deps_filtered_view(&self, package: &str, filter: &str) -> Result> { - let matcher = SkimMatcherV2::default(); - - let deps = self - .get_deps(package)? - .iter() - .filter_map(|dependency| { - matcher - .fuzzy(&dependency.get_name(), filter, true) - .map(|fuzzy_result| (dependency, fuzzy_result)) - }) - .sorted_by(|(_, fuzzy_a), (_, fuzzy_b)| fuzzy_a.0.cmp(&fuzzy_b.0).reverse()) - .map(|(dependency, fuzzy)| (dependency, fuzzy.1)) - .map(|(dependency, indexes)| SelectorItem::from_dependency(dependency, indexes)) - .collect(); + let deps = if filter.is_empty() { + self.get_deps(package)? + .iter() + .sorted_by(|dependency_a, dependency_b| dependency_a.name.cmp(&dependency_b.name)) + .map(|dependency| SelectorItem::from_dependency(dependency, vec![])) + .collect() + } else { + let matcher = SkimMatcherV2::default(); + + self.get_deps(package)? + .iter() + .filter_map(|dependency| { + matcher + .fuzzy(&dependency.get_name(), filter, true) + .map(|fuzzy_result| (dependency, fuzzy_result)) + }) + .sorted_by(|(_, fuzzy_a), (_, fuzzy_b)| fuzzy_a.0.cmp(&fuzzy_b.0).reverse()) + .map(|(dependency, fuzzy)| (dependency, fuzzy.1)) + .map(|(dependency, indexes)| SelectorItem::from_dependency(dependency, indexes)) + .collect() + }; Ok(deps) }