From 52310761f67220c9c075cd847205825a720035ee Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 21 Feb 2026 23:38:32 +0900 Subject: feat(console): add structured error handling, verbosity, and suggestions Implement Phase 7.2 error handling & UX infrastructure: - Add exit_code module with MozartError, bail()/bail_silent() helpers, and Composer-compatible exit code constants (0-5, 100) - Redesign Console struct with Verbosity enum (Quiet/Normal/Verbose/ VeryVerbose/Debug), ANSI auto-detection via IsTerminal, and verbosity-gated output methods (info/verbose/debug/error) - Thread Console through all 33 command execute() signatures - Replace all std::process::exit() calls with structured MozartError returns handled in main() - Migrate eprintln\! status messages to console.info() for quiet-mode suppression - Add suggest module with Levenshtein distance and "Did you mean?" formatting for future package name suggestions Co-Authored-By: Claude Opus 4.6 --- crates/mozart/src/commands/browse.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'crates/mozart/src/commands/browse.rs') diff --git a/crates/mozart/src/commands/browse.rs b/crates/mozart/src/commands/browse.rs index d17c6d0..0a89ae7 100644 --- a/crates/mozart/src/commands/browse.rs +++ b/crates/mozart/src/commands/browse.rs @@ -18,7 +18,11 @@ pub struct BrowseArgs { // ─── Main entry point ──────────────────────────────────────────────────────── -pub fn execute(args: &BrowseArgs, cli: &super::Cli) -> anyhow::Result<()> { +pub fn execute( + args: &BrowseArgs, + cli: &super::Cli, + console: &crate::console::Console, +) -> anyhow::Result<()> { let working_dir = match &cli.working_dir { Some(dir) => PathBuf::from(dir), None => std::env::current_dir()?, @@ -46,21 +50,18 @@ pub fn execute(args: &BrowseArgs, cli: &super::Cli) -> anyhow::Result<()> { if args.show { println!("{}", url); } else { - println!( - "{}", - crate::console::info(&format!("Opening {} in browser.", url)) - ); + console.info(&format!("Opening {} in browser.", url)); open_browser(&url)?; } } None => { - eprintln!( + console.info(&format!( "{}", crate::console::warning(&format!( "No URL found for package \"{}\".", package_name )) - ); + )); exit_code = 1; } } -- cgit v1.3.1