Skip to main content

conda_env_inspect/
cli.rs

1use clap::{Parser, Subcommand, ValueEnum};
2use std::path::PathBuf;
3
4#[derive(Debug, Copy, Clone, ValueEnum)]
5pub enum OutputFormat {
6    #[clap(name = "text")]
7    Text,
8    #[clap(name = "json")]
9    Json,
10    #[clap(name = "yaml")]
11    Yaml,
12    #[clap(name = "csv")]
13    Csv,
14    #[clap(name = "markdown")]
15    Markdown,
16    #[clap(name = "toml")]
17    Toml,
18}
19
20#[derive(Parser, Debug)]
21#[clap(
22    name = "conda-env-inspect",
23    version,
24    author = "Dishank Chauhan <dishankchauhan@gmail.com>",
25    about = "A tool for analyzing Conda environment files",
26    long_about = "A Rust-based CLI tool for analyzing Conda environment files, identifying dependencies, and providing optimization recommendations."
27)]
28pub struct Cli {
29    /// Path to the Conda environment file (environment.yml, environment.yaml, or conda-lock.yml)
30    #[clap(default_value = "environment.yml")]
31    pub file: PathBuf,
32
33    /// Format for output data (text, json, yaml, csv, markdown, toml)
34    #[clap(short, long, value_enum, default_value = "text")]
35    pub format: OutputFormat,
36
37    /// Output file path (if not specified, output will be written to stdout)
38    #[clap(short, long)]
39    pub output: Option<PathBuf>,
40
41    /// Check for outdated packages
42    #[clap(short, long)]
43    pub check_outdated: bool,
44
45    /// Flag pinned packages in the output
46    #[clap(short = 'p', long)]
47    pub flag_pinned: bool,
48
49    /// Generate a dependency graph (requires graphviz dot command)
50    #[clap(short, long)]
51    pub generate_graph: bool,
52
53    /// Output path for the dependency graph (required if --generate-graph is used)
54    #[clap(short = 'G', long)]
55    pub graph_output: Option<PathBuf>,
56
57    /// Generate optimization recommendations
58    #[clap(short = 'r', long)]
59    pub generate_recommendations: bool,
60
61    #[clap(subcommand)]
62    pub command: Option<Commands>,
63}
64
65#[derive(Subcommand, Debug)]
66pub enum Commands {
67    /// Analyze conda environment file
68    Analyze {
69        /// Path to the Conda environment file
70        #[clap(default_value = "environment.yml")]
71        file: PathBuf,
72
73        /// Check for outdated packages
74        #[clap(short, long)]
75        check_outdated: bool,
76
77        /// Flag pinned packages in the output
78        #[clap(short = 'p', long)]
79        flag_pinned: bool,
80
81        /// Generate a dependency graph
82        #[clap(short, long)]
83        generate_graph: bool,
84
85        /// Generate optimization recommendations
86        #[clap(short = 'r', long)]
87        generate_recommendations: bool,
88
89        /// Output path for the dependency graph
90        #[clap(short = 'G', long)]
91        graph_output: Option<PathBuf>,
92        
93        /// Use interactive TUI mode
94        #[clap(short, long)]
95        interactive: bool,
96        
97        /// Generate advanced dependency graph with conflict detection
98        #[clap(short = 'a', long)]
99        advanced_graph: bool,
100    },
101    
102    /// Export environment analysis in various formats
103    Export {
104        /// Path to the Conda environment file
105        #[clap(default_value = "environment.yml")]
106        file: PathBuf,
107        
108        /// Format for output data
109        #[clap(short, long, value_enum, default_value = "text")]
110        format: OutputFormat,
111        
112        /// Output file path (if not specified, output will be written to stdout)
113        #[clap(short = 'o', long)]
114        output: Option<PathBuf>,
115    },
116    
117    /// Generate dependency graph
118    Graph {
119        /// Path to the Conda environment file
120        #[clap(default_value = "environment.yml")]
121        file: PathBuf,
122        
123        /// Output path for the graph
124        #[clap(short = 'o', long, default_value = "dependency_graph.dot")]
125        output: PathBuf,
126        
127        /// Use advanced graph generation with conflict detection
128        #[clap(short = 'a', long)]
129        advanced: bool,
130    },
131    
132    /// Generate optimization recommendations for environment
133    Recommend {
134        /// Path to the Conda environment file
135        #[clap(default_value = "environment.yml")]
136        file: PathBuf,
137        
138        /// Check for outdated packages
139        #[clap(short, long)]
140        check_outdated: bool,
141    },
142    
143    /// Launch interactive TUI mode
144    Interactive {
145        /// Path to the Conda environment file
146        #[clap(default_value = "environment.yml")]
147        file: PathBuf,
148        
149        /// Check for outdated packages
150        #[clap(short, long)]
151        check_outdated: bool,
152        
153        /// Generate advanced dependency graph with conflict detection
154        #[clap(short = 'a', long)]
155        advanced_graph: bool,
156    },
157    
158    /// Check for known vulnerabilities in packages
159    Vulnerabilities {
160        /// Path to the Conda environment file
161        #[clap(default_value = "environment.yml")]
162        file: PathBuf,
163    },
164}