aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-08 12:39:54 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-08 12:39:54 +0800
commit004f507020ada18b6830de6e7323fb5037d68882 (patch)
tree31b9fa76443ccd3d41067edbfad8534718a53a17 /mingling_cli/src
parent1aeb64d941b31c30b9b1aab88dee44eefa3becc3 (diff)
feat(pkg-show): return early error for empty packages
Add dedicated error renderer for "No packages installed" and return it early instead of rendering empty package list.
Diffstat (limited to 'mingling_cli/src')
-rw-r--r--mingling_cli/src/pkg_mgr/cmd_pkg_show.rs27
1 files changed, 18 insertions, 9 deletions
diff --git a/mingling_cli/src/pkg_mgr/cmd_pkg_show.rs b/mingling_cli/src/pkg_mgr/cmd_pkg_show.rs
index 68aef2b..88c79ef 100644
--- a/mingling_cli/src/pkg_mgr/cmd_pkg_show.rs
+++ b/mingling_cli/src/pkg_mgr/cmd_pkg_show.rs
@@ -2,13 +2,13 @@ use std::{collections::BTreeMap, fs, io};
use colored::Colorize;
use mingling::{
- Grouped, Routable,
- macros::{buffer, command, metadata, r_println, renderer, routeify},
+ Grouped, RenderResult, Routable,
+ macros::{buffer, command, metadata, pack_err, r_println, renderer, routeify},
metadata::Description,
};
use crate::{
- Next,
+ Next, eprintln_cargo,
pkg_mgr::{ErrorNoDataDirectory, ResPackagesDir},
};
@@ -31,6 +31,8 @@ pub fn desc_pkg_show() -> Description {
"Show locally installed packages".into()
}
+pack_err!(ErrorNoPackagesInstalled);
+
#[command(node = "pkg-show", routeify)]
pub fn package_show(packages_dir: &ResPackagesDir) -> Next {
let packages_dir = &packages_dir.path;
@@ -79,17 +81,17 @@ pub fn package_show(packages_dir: &ResPackagesDir) -> Next {
pkg.versions.sort_by(|a, b| compare_versions(b, a));
}
- ResultPkgShow {
- packages: entries.into_values().collect(),
+ let packages: Vec<PkgShowEntry> = entries.into_values().collect();
+
+ if packages.is_empty() {
+ return ErrorNoPackagesInstalled::default().into();
}
- .to_chain()
+
+ ResultPkgShow { packages }.to_chain()
}
#[renderer(buffer)]
pub fn render_result_pkg_show(r: ResultPkgShow) {
- if r.packages.is_empty() {
- r_println!("No packages installed");
- }
for pkg in r.packages {
if let Some(enabled) = &pkg.enabled {
r_println!("{}", format!("{} ({})", pkg.name, enabled).bright_cyan());
@@ -102,6 +104,13 @@ pub fn render_result_pkg_show(r: ResultPkgShow) {
}
}
+#[renderer]
+pub fn render_error_no_packages_installed(_: ErrorNoPackagesInstalled) -> RenderResult {
+ let mut r = RenderResult::new();
+ eprintln_cargo!(r, "No packages installed");
+ r
+}
+
/// Newest first; unparsable versions sort last, compared lexicographically.
fn compare_versions(a: &str, b: &str) -> std::cmp::Ordering {
match (semver::Version::parse(a), semver::Version::parse(b)) {