use clap::Args;
use zoi_common::Runnable;
use crate::cli::InstallScope;
use crate::pkg::plugin::PluginManager;
#[derive(Args, Debug, Clone)]
pub struct UninstallArgs {
#[arg(
value_name = "INST_PACKAGES",
required = true,
help = "Package identifier (e.g. @repo/name, path, or URL)"
)]
pub packages: Vec<String>,
#[arg(long, value_enum, conflicts_with_all = &["local", "global"])]
pub scope: Option<InstallScope>,
#[arg(long, conflicts_with = "global")]
pub local: bool,
#[arg(long)]
pub global: bool,
#[arg(long)]
pub save: bool,
#[arg(short, long)]
pub recursive: bool,
#[arg(long)]
pub dry_run: bool,
#[arg(long)]
pub explain: bool,
#[arg(long)]
pub plan_json: bool
}
impl Runnable for UninstallArgs {
fn run(&self, yes: bool) -> anyhow::Result<()> {
let plugin_manager = PluginManager::new()?;
super::run(
&self.packages,
self.scope,
self.local,
self.global,
self.save,
yes,
self.recursive,
Some(&plugin_manager),
self.explain,
self.plan_json,
self.dry_run
)
}
}