use std::{collections::HashSet, fs, path};
use clap::Parser;
fn main() {
let mut args = Args::parse();
if args.removes.is_empty() {
args.removes = ["target", "node_modules"].map(|it| it.to_string()).to_vec();
}
let p = {
match std::env::current_exe() {
Err(e) => {
println!("{}", e);
return;
}
Ok(t) => t.parent().expect("").to_path_buf(),
}
};
if let Err(e) = remove_target(&p, &HashSet::from(["target", "node_modules"])) {
println!("{}", e);
}
}
fn remove_target(dir: &path::PathBuf, target: &HashSet<&str>) -> Result<(), std::io::Error> {
for it in walkdir::WalkDir::new(dir).into_iter().flatten() {
let path = it.path();
let it_path = path.file_name().expect("").to_str().expect("");
if target.contains(it_path) {
println!("removing : {:?}", path);
fs::remove_dir_all(path)?;
println!("removed : {:?}", path);
}
}
Ok(())
}
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
#[arg(short, long)]
removes: Vec<String>,
#[arg(short, long, default_value_t = String::default())]
path: String,
}