1use crate::utils;
2use anyhow::Result;
3use clap_complete::Shell;
4use zoi_resolver::local;
5
6pub fn run(shell: Shell, index: usize, words: Vec<String>) -> Result<()> {
7 if index <= 1 {
8 return Ok(());
9 }
10
11 if words.len() < 2 {
12 return Ok(());
13 }
14
15 let subcmd = &words[1];
16
17 match subcmd.as_str() {
18 "install" | "i" | "in" | "add" | "show" | "exec" | "x" | "create" | "clone" | "use"
19 | "tree" | "man" | "shell" => {
20 let pkgs = utils::get_all_packages_for_completion();
21 for pkg in pkgs {
22 if shell == Shell::Zsh {
23 println!("{}:{}", pkg.display, pkg.description);
24 } else {
25 println!("{}", pkg.display);
26 }
27 }
28 }
29 "uninstall" | "un" | "rm" | "remove" | "mark" | "m" | "update" | "up" | "why" | "files"
30 | "pin" | "unpin" | "downgrade" | "dg" | "rollback" => {
31 if let Ok(installed) = local::get_installed_packages() {
32 for pkg in installed {
33 let display = local::installed_manifest_source(&pkg);
34 if shell == Shell::Zsh {
35 println!("{}:{}", display, pkg.description);
36 } else {
37 println!("{}", display);
38 }
39 }
40 }
41 }
42 _ => {
43 }
45 }
46
47 Ok(())
48}