use std::fmt::Write;
use std::path::Path;
use anyhow::Result;
use owo_colors::OwoColorize;
use uv_cache::Cache;
use uv_fs::Simplified;
use uv_workspace::{DiscoveryOptions, Workspace, WorkspaceCache};
use crate::commands::ExitStatus;
use crate::printer::Printer;
pub(crate) async fn list(
project_dir: &Path,
paths: bool,
cache: &Cache,
workspace_cache: &WorkspaceCache,
printer: Printer,
) -> Result<ExitStatus> {
let workspace = Workspace::discover(
project_dir,
&DiscoveryOptions::default(),
cache,
workspace_cache,
)
.await?;
for (name, member) in workspace.packages() {
if paths {
writeln!(
printer.stdout(),
"{}",
member.root().simplified_display().cyan()
)?;
} else {
writeln!(printer.stdout(), "{}", name.cyan())?;
}
}
Ok(ExitStatus::Success)
}