add clean subcommand to CLI

This commit is contained in:
Moritz Hölting 2024-06-09 20:17:48 +02:00
parent cfb8eac3f9
commit ebb8fff3d3
4 changed files with 56 additions and 7 deletions

View File

@ -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")]

View File

@ -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,
}
}

40
src/subcommands/clean.rs Normal file
View File

@ -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(())
}

View File

@ -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")]