From 4490ea5f224eebf864143eeeb9bdc1e9fd06cf83 Mon Sep 17 00:00:00 2001 From: tetuaoro <65575727+tetuaoro@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:49:46 +0200 Subject: [PATCH 1/3] feat: add exclude patterns --- Cargo.lock | 8 ++++---- cli/src/main.rs | 29 ++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cad6e46..b4e58dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -292,7 +292,7 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "leptosfmt" -version = "0.1.19" +version = "0.1.20" dependencies = [ "anyhow", "clap", @@ -306,7 +306,7 @@ dependencies = [ [[package]] name = "leptosfmt-formatter" -version = "0.1.19" +version = "0.1.20" dependencies = [ "crop", "indoc", @@ -324,11 +324,11 @@ dependencies = [ [[package]] name = "leptosfmt-pretty-printer" -version = "0.1.19" +version = "0.1.20" [[package]] name = "leptosfmt-prettyplease" -version = "0.1.19" +version = "0.1.20" dependencies = [ "indoc", "leptosfmt-pretty-printer", diff --git a/cli/src/main.rs b/cli/src/main.rs index 3f202b8..79809f6 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -12,7 +12,7 @@ use std::{ use anyhow::Context; use clap::Parser; use console::Style; -use glob::{glob, GlobError}; +use glob::{glob, GlobError, Pattern}; use leptosfmt_formatter::{format_file_source, FormatterSettings}; use rayon::{iter::ParallelIterator, prelude::IntoParallelIterator}; use similar::{ChangeTag, TextDiff}; @@ -33,6 +33,10 @@ struct Args { #[arg(short, long)] tab_spaces: Option, + /// A space separated list of file or directory + #[arg(short = 'x', long = "excludes")] + exclude_patterns: Option>, + /// Configuration file #[arg(short, long)] config_file: Option, @@ -142,7 +146,8 @@ fn main() { }; let input_patterns = args.input_patterns.unwrap(); - let file_paths: Vec<_> = get_file_paths(input_patterns).unwrap(); + let exclude_patterns = args.exclude_patterns.unwrap_or_default(); + let file_paths: Vec<_> = get_file_paths(input_patterns, exclude_patterns).unwrap(); let total_files = file_paths.len(); let start_formatting = Instant::now(); @@ -184,7 +189,22 @@ fn main() { } } -fn get_file_paths(input_patterns: Vec) -> Result, GlobError> { +fn get_file_paths(input_patterns: Vec, exclude_patterns: Vec) -> Result, GlobError> { + let exclude_patterns = exclude_patterns + .into_iter() + .filter_map(|exclude_pattern| { + let is_dir = fs::metadata(&exclude_pattern) + .map(|meta| meta.is_dir()) + .unwrap_or(false); + let global_pattern = if is_dir { + format!("{}/**/*", &exclude_pattern.trim_end_matches('/')) + } else { + exclude_pattern + }; + Pattern::new(&global_pattern).ok() + }) + .collect::>(); + input_patterns .into_iter() .flat_map(|input_pattern| { @@ -198,6 +218,9 @@ fn get_file_paths(input_patterns: Vec) -> Result, GlobError }; glob(&glob_pattern) .expect("failed to read glob pattern") + .filter(|is_file| { + is_file.as_ref().is_ok_and(|file| !exclude_patterns.iter().any(|pattern| pattern.matches_path(file))) + }) .collect::>() }) .collect() From b9186840145410a844bbabfbd9a85f00bf558347 Mon Sep 17 00:00:00 2001 From: tetuaoro <65575727+tetuaoro@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:13:00 +0200 Subject: [PATCH 2/3] update: README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 03e7e77..c9dc092 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,8 @@ Options: Maximum width of each line -t, --tab-spaces Number of spaces per tab + -x, --excludes + A space separated list of file or directory -c, --config-file Configuration file -s, --stdin From 6603d8a3a6ac94bad347eed144dd72c39b6eb3ce Mon Sep 17 00:00:00 2001 From: tetuaoro <65575727+tetuaoro@users.noreply.github.com> Date: Wed, 31 Jul 2024 12:15:43 +0200 Subject: [PATCH 3/3] update: duplication code & unnecessary return collection --- cli/src/main.rs | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 79809f6..e6ce4cc 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -189,39 +189,33 @@ fn main() { } } +fn as_glob_pattern(pattern: String) -> String { + let is_dir = fs::metadata(&pattern) + .map(|meta| meta.is_dir()) + .unwrap_or(false); + if is_dir { + return format!("{}/**/*.rs", &pattern.trim_end_matches('/')); + } + pattern +} + fn get_file_paths(input_patterns: Vec, exclude_patterns: Vec) -> Result, GlobError> { let exclude_patterns = exclude_patterns .into_iter() - .filter_map(|exclude_pattern| { - let is_dir = fs::metadata(&exclude_pattern) - .map(|meta| meta.is_dir()) - .unwrap_or(false); - let global_pattern = if is_dir { - format!("{}/**/*", &exclude_pattern.trim_end_matches('/')) - } else { - exclude_pattern - }; - Pattern::new(&global_pattern).ok() - }) - .collect::>(); + .map(as_glob_pattern) + .map(|p| Pattern::new(&p)) + .collect::, _>>() + .expect("failed to parse exclude glob pattern"); input_patterns .into_iter() - .flat_map(|input_pattern| { - let is_dir = fs::metadata(&input_pattern) - .map(|meta| meta.is_dir()) - .unwrap_or(false); - let glob_pattern = if is_dir { - format!("{}/**/*.rs", &input_pattern) - } else { - input_pattern - }; + .map(as_glob_pattern) + .flat_map(|glob_pattern| { glob(&glob_pattern) .expect("failed to read glob pattern") .filter(|is_file| { is_file.as_ref().is_ok_and(|file| !exclude_patterns.iter().any(|pattern| pattern.matches_path(file))) }) - .collect::>() }) .collect() }