diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-06 03:38:32 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-06 04:05:13 +0900 |
| commit | bf96f8292c0e9818c8b5fc8713ca7506e4338a49 (patch) | |
| tree | 61ddecc119ee0ae344eabdb9c0f784cdb3461a44 /crates/mozart/src/commands/show.rs | |
| parent | b97e34358be5df05a3db9f5f3ef1502eaa94b1c0 (diff) | |
| download | php-mozart-bf96f8292c0e9818c8b5fc8713ca7506e4338a49.tar.gz php-mozart-bf96f8292c0e9818c8b5fc8713ca7506e4338a49.tar.zst php-mozart-bf96f8292c0e9818c8b5fc8713ca7506e4338a49.zip | |
refactor(console): add write macros and migrate commands to use them
Diffstat (limited to 'crates/mozart/src/commands/show.rs')
| -rw-r--r-- | crates/mozart/src/commands/show.rs | 273 |
1 files changed, 131 insertions, 142 deletions
diff --git a/crates/mozart/src/commands/show.rs b/crates/mozart/src/commands/show.rs index c07ffb1..7b87403 100644 --- a/crates/mozart/src/commands/show.rs +++ b/crates/mozart/src/commands/show.rs @@ -1,7 +1,8 @@ use clap::Args; use indexmap::{IndexMap, IndexSet}; -use mozart_core::console::Verbosity; use mozart_core::console_format; +use mozart_core::console_writeln; +use mozart_core::console_writeln_error; use mozart_core::matches_wildcard; use std::path::Path; @@ -158,11 +159,11 @@ pub async fn execute( // Fix 8: --ignore without --outdated warning if !args.ignore.is_empty() && !args.outdated { - console.write( + console_writeln_error!( + console, &console_format!( "<warning>You are using the option \"ignore\" for action other than \"outdated\", it will be ignored.</warning>" ), - Verbosity::Normal, ); } @@ -212,11 +213,11 @@ async fn execute_installed( if composer_json_path.exists() { let root = mozart_core::package::read_from_file(&composer_json_path)?; if !root.require.is_empty() || !root.require_dev.is_empty() { - console.write( + console_writeln_error!( + console, &console_format!( "<warning>No dependencies installed. Try running mozart install or update.</warning>" ), - Verbosity::Normal, ); } } @@ -236,7 +237,7 @@ async fn execute_installed( Some(p) => { let install_path = vendor_dir.join(&p.name); let path_str = resolve_path(&install_path); - console.write_stdout(&format!("{} {}", p.name, path_str), Verbosity::Normal); + console_writeln!(console, &format!("{} {}", p.name, path_str),); } None => { anyhow::bail!( @@ -268,7 +269,7 @@ async fn execute_installed( for pkg in &packages { let install_path = vendor_dir.join(&pkg.name); let path_str = resolve_path(&install_path); - console.write_stdout(&format!("{} {}", pkg.name, path_str), Verbosity::Normal); + console_writeln!(console, &format!("{} {}", pkg.name, path_str),); } return Ok(()); } @@ -327,7 +328,7 @@ async fn show_installed_package_list( if args.name_only { for pkg in packages { - console.write_stdout(&pkg.name, Verbosity::Normal); + console_writeln!(console, &pkg.name); } return Ok(()); } @@ -480,17 +481,17 @@ async fn show_installed_package_list( } None => format!("{:<width$}", "", width = latest_width), }; - console.write_stdout( + console_writeln!( + console, &format!( "{} {} {} {}", name_str, version_str, latest_str, entry.description ), - Verbosity::Normal, ); } else { - console.write_stdout( + console_writeln!( + console, &format!("{} {} {}", name_str, version_str, entry.description), - Verbosity::Normal, ); } } @@ -601,7 +602,7 @@ fn render_installed_json( .collect(); let output = serde_json::json!({ "installed": json_entries }); - console.write_stdout(&serde_json::to_string_pretty(&output)?, Verbosity::Normal); + console_writeln!(console, &serde_json::to_string_pretty(&output)?,); Ok(()) } @@ -629,64 +630,64 @@ fn show_installed_package_detail( let vendor_dir = working_dir.join("vendor"); - console.write_stdout( + console_writeln!( + console, &format!("{} : {}", console_format!("<info>name</info>"), pkg.name), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>descrip.</info>"), get_installed_description(pkg) ), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>keywords</info>"), get_installed_keywords(pkg) ), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>versions</info>"), format_version_highlight(&pkg.version) ), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>type</info>"), pkg.package_type.as_deref().unwrap_or("library") ), - Verbosity::Normal, ); // License — one line per identifier, matching Composer's printLicenses. for license_id in get_installed_licenses(pkg) { - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>license</info>"), format_license_for_show(&license_id), ), - Verbosity::Normal, ); } // Homepage if let Some(homepage) = get_installed_homepage(pkg) { - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>homepage</info>"), homepage ), - Verbosity::Normal, ); } @@ -698,7 +699,8 @@ fn show_installed_package_detail( .get("reference") .and_then(|v| v.as_str()) .unwrap_or(""); - console.write_stdout( + console_writeln!( + console, &format!( "{} : [{}] {} {}", console_format!("<info>source</info>"), @@ -706,7 +708,6 @@ fn show_installed_package_detail( console_format!("<comment>{}</comment>", source_url), source_ref ), - Verbosity::Normal, ); } @@ -715,7 +716,8 @@ fn show_installed_package_detail( let dist_type = dist.get("type").and_then(|v| v.as_str()).unwrap_or(""); let dist_url = dist.get("url").and_then(|v| v.as_str()).unwrap_or(""); let dist_ref = dist.get("reference").and_then(|v| v.as_str()).unwrap_or(""); - console.write_stdout( + console_writeln!( + console, &format!( "{} : [{}] {} {}", console_format!("<info>dist</info>"), @@ -723,20 +725,19 @@ fn show_installed_package_detail( console_format!("<comment>{}</comment>", dist_url), dist_ref ), - Verbosity::Normal, ); } // Path let install_path = vendor_dir.join(&pkg.name); if install_path.exists() { - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>path</info>"), install_path.display() ), - Verbosity::Normal, ); } @@ -744,13 +745,13 @@ fn show_installed_package_detail( if let Some(requires) = pkg.extra_fields.get("require").and_then(|v| v.as_object()) && !requires.is_empty() { - console.write_stdout("", Verbosity::Normal); - console.write_stdout(&console_format!("<info>requires</info>"), Verbosity::Normal); + console_writeln!(console, ""); + console_writeln!(console, &console_format!("<info>requires</info>"),); for (name, constraint) in requires { let c = constraint.as_str().unwrap_or(""); - console.write_stdout( + console_writeln!( + console, &format!("{} {}", name, console_format!("<comment>{}</comment>", c)), - Verbosity::Normal, ); } } @@ -762,16 +763,13 @@ fn show_installed_package_detail( .and_then(|v| v.as_object()) && !requires_dev.is_empty() { - console.write_stdout("", Verbosity::Normal); - console.write_stdout( - &console_format!("<info>requires (dev)</info>"), - Verbosity::Normal, - ); + console_writeln!(console, ""); + console_writeln!(console, &console_format!("<info>requires (dev)</info>"),); for (name, constraint) in requires_dev { let c = constraint.as_str().unwrap_or(""); - console.write_stdout( + console_writeln!( + console, &format!("{} {}", name, console_format!("<comment>{}</comment>", c)), - Verbosity::Normal, ); } } @@ -845,7 +843,7 @@ async fn show_locked_package_list( if args.name_only { for pkg in packages { - console.write_stdout(&pkg.name, Verbosity::Normal); + console_writeln!(console, &pkg.name); } return Ok(()); } @@ -996,17 +994,17 @@ async fn show_locked_package_list( } None => format!("{:<width$}", "", width = latest_width), }; - console.write_stdout( + console_writeln!( + console, &format!( "{} {} {} {}", name_str, version_str, latest_str, entry.description ), - Verbosity::Normal, ); } else { - console.write_stdout( + console_writeln!( + console, &format!("{} {} {}", name_str, version_str, entry.description), - Verbosity::Normal, ); } } @@ -1057,7 +1055,7 @@ fn render_locked_json( .collect(); let output = serde_json::json!({ "installed": json_entries }); - console.write_stdout(&serde_json::to_string_pretty(&output)?, Verbosity::Normal); + console_writeln!(console, &serde_json::to_string_pretty(&output)?,); Ok(()) } @@ -1080,17 +1078,17 @@ fn show_locked_package_detail( } }; - console.write_stdout( + console_writeln!( + console, &format!("{} : {}", console_format!("<info>name</info>"), pkg.name), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>descrip.</info>"), pkg.description.as_deref().unwrap_or("") ), - Verbosity::Normal, ); // Keywords @@ -1099,61 +1097,62 @@ fn show_locked_package_detail( .as_ref() .map(|kw| kw.join(", ")) .unwrap_or_default(); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>keywords</info>"), keywords ), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : * {}", console_format!("<info>versions</info>"), format_version(&pkg.version) ), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>type</info>"), pkg.package_type.as_deref().unwrap_or("library") ), - Verbosity::Normal, ); // License — one line per identifier, matching Composer's printLicenses. if let Some(ref licenses) = pkg.license { for license_id in licenses { - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>license</info>"), format_license_for_show(license_id), ), - Verbosity::Normal, ); } } // Homepage if let Some(ref homepage) = pkg.homepage { - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>homepage</info>"), homepage ), - Verbosity::Normal, ); } // Source if let Some(ref source) = pkg.source { - console.write_stdout( + console_writeln!( + console, &format!( "{} : [{}] {} {}", console_format!("<info>source</info>"), @@ -1161,13 +1160,13 @@ fn show_locked_package_detail( console_format!("<comment>{}</comment>", &source.url), source.reference.as_deref().unwrap_or("") ), - Verbosity::Normal, ); } // Dist if let Some(ref dist) = pkg.dist { - console.write_stdout( + console_writeln!( + console, &format!( "{} : [{}] {} {}", console_format!("<info>dist</info>"), @@ -1175,41 +1174,37 @@ fn show_locked_package_detail( console_format!("<comment>{}</comment>", &dist.url), dist.reference.as_deref().unwrap_or("") ), - Verbosity::Normal, ); } // Requires if !pkg.require.is_empty() { - console.write_stdout("", Verbosity::Normal); - console.write_stdout(&console_format!("<info>requires</info>"), Verbosity::Normal); + console_writeln!(console, ""); + console_writeln!(console, &console_format!("<info>requires</info>"),); for (name, constraint) in &pkg.require { - console.write_stdout( + console_writeln!( + console, &format!( "{} {}", name, console_format!("<comment>{}</comment>", constraint) ), - Verbosity::Normal, ); } } // Requires (dev) if !pkg.require_dev.is_empty() { - console.write_stdout("", Verbosity::Normal); - console.write_stdout( - &console_format!("<info>requires (dev)</info>"), - Verbosity::Normal, - ); + console_writeln!(console, ""); + console_writeln!(console, &console_format!("<info>requires (dev)</info>"),); for (name, constraint) in &pkg.require_dev { - console.write_stdout( + console_writeln!( + console, &format!( "{} {}", name, console_format!("<comment>{}</comment>", constraint) ), - Verbosity::Normal, ); } } @@ -1218,16 +1213,16 @@ fn show_locked_package_detail( if let Some(ref suggests) = pkg.suggest && !suggests.is_empty() { - console.write_stdout("", Verbosity::Normal); - console.write_stdout(&console_format!("<info>suggests</info>"), Verbosity::Normal); + console_writeln!(console, ""); + console_writeln!(console, &console_format!("<info>suggests</info>"),); for (name, reason) in suggests { - console.write_stdout( + console_writeln!( + console, &format!( "{} {}", name, console_format!("<comment>{}</comment>", reason) ), - Verbosity::Normal, ); } } @@ -1247,82 +1242,79 @@ fn show_self( let root = mozart_core::package::read_from_file(&composer_json_path)?; if args.name_only { - console.write_stdout(&root.name, Verbosity::Normal); + console_writeln!(console, &root.name); return Ok(()); } - console.write_stdout( + console_writeln!( + console, &format!("{} : {}", console_format!("<info>name</info>"), root.name), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>descrip.</info>"), root.description.as_deref().unwrap_or("") ), - Verbosity::Normal, ); - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>type</info>"), root.package_type.as_deref().unwrap_or("project") ), - Verbosity::Normal, ); if let Some(ref license) = root.license { - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>license</info>"), format_license_for_show(license), ), - Verbosity::Normal, ); } if let Some(ref homepage) = root.homepage { - console.write_stdout( + console_writeln!( + console, &format!( "{} : {}", console_format!("<info>homepage</info>"), homepage ), - Verbosity::Normal, ); } // Requires if !root.require.is_empty() { - console.write_stdout("", Verbosity::Normal); - console.write_stdout(&console_format!("<info>requires</info>"), Verbosity::Normal); + console_writeln!(console, ""); + console_writeln!(console, &console_format!("<info>requires</info>"),); for (name, constraint) in &root.require { - console.write_stdout( + console_writeln!( + console, &format!( "{} {}", name, console_format!("<comment>{}</comment>", constraint) ), - Verbosity::Normal, ); } } // Requires (dev) if !root.require_dev.is_empty() { - console.write_stdout("", Verbosity::Normal); - console.write_stdout( - &console_format!("<info>requires (dev)</info>"), - Verbosity::Normal, - ); + console_writeln!(console, ""); + console_writeln!(console, &console_format!("<info>requires (dev)</info>"),); for (name, constraint) in &root.require_dev { - console.write_stdout( + console_writeln!( + console, &format!( "{} {}", name, console_format!("<comment>{}</comment>", constraint) ), - Verbosity::Normal, ); } } @@ -1378,13 +1370,13 @@ fn show_tree( }; // Print root - console.write_stdout( + console_writeln!( + console, &console_format!( "<info>{}</info> <comment>{}</comment>", &root.name, root.description.as_deref().unwrap_or("") ), - Verbosity::Normal, ); // Render each root dependency as a tree @@ -1430,22 +1422,22 @@ fn print_tree_node( let description = pkg.description.as_deref().unwrap_or(""); let version = format_version(&pkg.version); - console.write_stdout( + console_writeln!( + console, &format!( "{} {} {}", prefix, console_format!("<info>{}</info> <comment>{}</comment>", pkg_name, &version), description ), - Verbosity::Normal, ); // Detect circular dependency or depth limit if visited.contains(&key) || depth >= MAX_DEPTH { if visited.contains(&key) { - console.write_stdout( + console_writeln!( + console, &format!("{} {} (circular dependency)", child_prefix, pkg_name), - Verbosity::Normal, ); } return; @@ -1494,14 +1486,14 @@ fn print_tree_node( } else { // Package not found in lock file (platform package or not installed) if !is_platform_package(&key) { - console.write_stdout( + console_writeln!( + console, &format!( "{} {} {} (not installed)", prefix, console_format!("<comment>{}</comment>", pkg_name), constraint ), - Verbosity::Normal, ); } } @@ -1588,9 +1580,9 @@ fn show_platform( }) }) .collect(); - console.write_stdout( + console_writeln!( + console, &serde_json::to_string_pretty(&serde_json::json!({ "platform": json_entries }))?, - Verbosity::Normal, ); return Ok(()); } @@ -1604,7 +1596,7 @@ fn show_platform( if args.name_only { for (name, _, _) in &platform_packages { - console.write_stdout(name, Verbosity::Normal); + console_writeln!(console, name); } return Ok(()); } @@ -1621,7 +1613,8 @@ fn show_platform( .unwrap_or(0); for (name, version, _source) in &platform_packages { - console.write_stdout( + console_writeln!( + console, &format!( "{} {}", console_format!("<info>{:<width$}</info>", name, width = name_width), @@ -1631,7 +1624,6 @@ fn show_platform( width = version_width ), ), - Verbosity::Normal, ); } @@ -1661,13 +1653,13 @@ async fn show_available( let lock_path = working_dir.join("composer.lock"); if lock_path.exists() { let lock = mozart_registry::lockfile::LockFile::read_from_file(&lock_path)?; - console.write_stdout( + console_writeln!( + console, &console_format!( "<info>Available versions for locked packages (from Packagist):</info>" ), - Verbosity::Normal, ); - console.write_stdout("", Verbosity::Normal); + console_writeln!(console, ""); let mut all_packages: Vec<&mozart_registry::lockfile::LockedPackage> = lock.packages.iter().collect(); @@ -1686,23 +1678,23 @@ async fn show_available( return Ok(()); } - console.write( + console_writeln_error!( + console, &console_format!( "<warning>No dependencies installed. Try running mozart install or update.</warning>" ), - Verbosity::Normal, ); return Ok(()); } }; - console.write_stdout( + console_writeln!( + console, &console_format!( "<info>Available versions for installed packages (from Packagist):</info>" ), - Verbosity::Normal, ); - console.write_stdout("", Verbosity::Normal); + console_writeln!(console, ""); let format = args.format.as_deref().unwrap_or("text"); @@ -1732,7 +1724,7 @@ async fn show_available( } } let output = serde_json::json!({ "packages": json_entries }); - console.write_stdout(&serde_json::to_string_pretty(&output)?, Verbosity::Normal); + console_writeln!(console, &serde_json::to_string_pretty(&output)?,); return Ok(()); } @@ -1754,10 +1746,7 @@ async fn show_available_versions( ) -> anyhow::Result<()> { let versions = mozart_registry::packagist::fetch_package_versions(pkg_name, repo_cache).await?; if versions.is_empty() { - console.write_stdout( - &format!("No versions found for {pkg_name}"), - Verbosity::Normal, - ); + console_writeln!(console, &format!("No versions found for {pkg_name}"),); return Ok(()); } @@ -1768,18 +1757,18 @@ async fn show_available_versions( "name": pkg_name, "versions": version_strings, }); - console.write_stdout(&serde_json::to_string_pretty(&output)?, Verbosity::Normal); + console_writeln!(console, &serde_json::to_string_pretty(&output)?,); return Ok(()); } - console.write_stdout( + console_writeln!( + console, &console_format!("<info>Available versions for {pkg_name}:</info>"), - Verbosity::Normal, ); for v in &versions { - console.write_stdout( + console_writeln!( + console, &format!(" {}", console_format!("<comment>{}</comment>", &v.version)), - Verbosity::Normal, ); } Ok(()) @@ -1793,12 +1782,12 @@ async fn show_available_versions_inline( match mozart_registry::packagist::fetch_package_versions(pkg_name, repo_cache).await { Ok(versions) => { if versions.is_empty() { - console.write_stdout( + console_writeln!( + console, &format!( "{}: no versions found", console_format!("<info>{}</info>", pkg_name) ), - Verbosity::Normal, ); return; } @@ -1813,23 +1802,23 @@ async fn show_available_versions_inline( } else { String::new() }; - console.write_stdout( + console_writeln!( + console, &format!( "{}: {}{}", console_format!("<info>{}</info>", pkg_name), console_format!("<comment>{}</comment>", &shown.join(", ")), rest ), - Verbosity::Normal, ); } Err(_) => { - console.write_stdout( + console_writeln!( + console, &format!( "{}: (could not fetch from Packagist)", console_format!("<comment>{}</comment>", pkg_name) ), - Verbosity::Normal, ); } } |
