add clean subcommand to CLI
This commit is contained in:
		
							parent
							
								
									cfb8eac3f9
								
							
						
					
					
						commit
						ebb8fff3d3
					
				|  | @ -1,4 +1,4 @@ | |||
| use crate::subcommands::{self, BuildArgs, InitArgs}; | ||||
| use crate::subcommands::{self, BuildArgs, CleanArgs, InitArgs}; | ||||
| use clap::{Parser, Subcommand}; | ||||
| use color_eyre::eyre::Result; | ||||
| 
 | ||||
|  | @ -18,6 +18,9 @@ pub enum Command { | |||
|     Init(InitArgs), | ||||
|     /// Build the project.
 | ||||
|     Build(BuildArgs), | ||||
|     /// Clean build artifacts.
 | ||||
|     /// This will remove the `dist` directory.
 | ||||
|     Clean(CleanArgs), | ||||
|     #[cfg(feature = "zip")] | ||||
|     /// Build and package the project.
 | ||||
|     Package(subcommands::PackageArgs), | ||||
|  | @ -31,6 +34,7 @@ impl Args { | |||
|         match &self.cmd { | ||||
|             Command::Init(args) => subcommands::init(self.verbose, args)?, | ||||
|             Command::Build(args) => subcommands::build(self.verbose, args)?, | ||||
|             Command::Clean(args) => subcommands::clean(self.verbose, args)?, | ||||
|             #[cfg(feature = "zip")] | ||||
|             Command::Package(args) => subcommands::package(self.verbose, args)?, | ||||
|             #[cfg(feature = "lang-debug")] | ||||
|  |  | |||
							
								
								
									
										14
									
								
								src/main.rs
								
								
								
								
							
							
						
						
									
										14
									
								
								src/main.rs
								
								
								
								
							|  | @ -1,12 +1,14 @@ | |||
| use std::process::ExitCode; | ||||
| 
 | ||||
| use clap::Parser; | ||||
| use color_eyre::eyre::Result; | ||||
| use shulkerscript::cli::Args; | ||||
| 
 | ||||
| fn main() -> Result<()> { | ||||
|     color_eyre::install()?; | ||||
| fn main() -> ExitCode { | ||||
|     color_eyre::install().unwrap(); | ||||
|     let args = Args::parse(); | ||||
| 
 | ||||
|     args.run()?; | ||||
| 
 | ||||
|     Ok(()) | ||||
|     match args.run() { | ||||
|         Ok(_) => ExitCode::SUCCESS, | ||||
|         Err(_) => ExitCode::FAILURE, | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,40 @@ | |||
| use std::path::PathBuf; | ||||
| 
 | ||||
| use color_eyre::eyre::Result; | ||||
| use path_absolutize::Absolutize; | ||||
| 
 | ||||
| use crate::{ | ||||
|     error::Error, | ||||
|     terminal_output::{print_error, print_info}, | ||||
| }; | ||||
| 
 | ||||
| #[derive(Debug, clap::Args, Clone)] | ||||
| pub struct CleanArgs { | ||||
|     /// The path of the project to clean.
 | ||||
|     #[clap(default_value = ".")] | ||||
|     pub path: PathBuf, | ||||
| } | ||||
| 
 | ||||
| pub fn clean(_verbose: bool, args: &CleanArgs) -> Result<()> { | ||||
|     let path = args.path.as_path(); | ||||
| 
 | ||||
|     print_info(&format!( | ||||
|         "Cleaning project at {}", | ||||
|         path.absolutize_from(path)?.display() | ||||
|     )); | ||||
| 
 | ||||
|     let dist_path = path.join("dist"); | ||||
| 
 | ||||
|     if !path.join("pack.toml").exists() { | ||||
|         print_error("The specified directory is not a ShulkerScript project."); | ||||
|         return Err(Error::InvalidPackPathError(path.to_path_buf()).into()); | ||||
|     } | ||||
| 
 | ||||
|     if dist_path.exists() { | ||||
|         std::fs::remove_dir_all(&dist_path)?; | ||||
|     } | ||||
| 
 | ||||
|     print_info("Project cleaned successfully."); | ||||
| 
 | ||||
|     Ok(()) | ||||
| } | ||||
|  | @ -4,6 +4,9 @@ pub use init::{init, InitArgs}; | |||
| mod build; | ||||
| pub use build::{build, BuildArgs}; | ||||
| 
 | ||||
| mod clean; | ||||
| pub use clean::{clean, CleanArgs}; | ||||
| 
 | ||||
| #[cfg(feature = "zip")] | ||||
| mod package; | ||||
| #[cfg(feature = "zip")] | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue