fix: exit 1 when providing invalid file or patterns

This commit is contained in:
Loïc Riegel 2025-02-22 00:57:08 +01:00
parent 5fe1487716
commit f1e0e6c185
2 changed files with 35 additions and 8 deletions

View File

@ -214,24 +214,43 @@ For more information try `pylyzer --help`"
cfg cfg
} }
pub(crate) fn files_to_be_checked() -> Vec<PathBuf> { pub(crate) fn files_to_be_checked() -> (Vec<PathBuf>, Vec<String>) {
let file_or_patterns = env::args() let file_or_patterns = env::args()
.skip(1) .skip(1)
.rev() .rev()
.take_while(|arg| !arg.starts_with("-")); .take_while(|arg| !arg.starts_with("-"));
let mut files = HashSet::new(); let mut files = HashSet::new();
let mut invalid_files = HashSet::new();
for file_or_pattern in file_or_patterns { for file_or_pattern in file_or_patterns {
if PathBuf::from(&file_or_pattern).is_file() { if PathBuf::from(&file_or_pattern).is_file() {
files.insert(PathBuf::from(&file_or_pattern)); files.insert(PathBuf::from(&file_or_pattern));
} else { } else {
for entry in glob::glob(&file_or_pattern).expect("Failed to read glob pattern") { let entries = glob::glob(&file_or_pattern);
match entry { match entries {
Err(e) => eprintln!("err: {e}"), Err(_) => {
Ok(path) if path.is_file() => {files.insert(path);}, invalid_files.insert(file_or_pattern.clone());
_ => {} continue;
}
Ok(entries) => {
let mut entries = entries.into_iter().peekable();
if entries.peek().is_none() {
invalid_files.insert(file_or_pattern.clone());
}
for entry in entries {
match entry {
Err(e) => eprintln!("err: {e}"),
Ok(path) if path.is_file() => {
files.insert(path);
}
_ => {}
}
}
} }
} }
} }
} }
files.into_iter().collect() (
files.into_iter().collect(),
invalid_files.into_iter().collect(),
)
} }

View File

@ -4,6 +4,8 @@ mod copy;
use els::Server; use els::Server;
use erg_common::config::ErgMode; use erg_common::config::ErgMode;
use erg_common::spawn::exec_new_thread; use erg_common::spawn::exec_new_thread;
use erg_common::style::colors::RED;
use erg_common::style::RESET;
use pylyzer_core::{PythonAnalyzer, SimplePythonParser}; use pylyzer_core::{PythonAnalyzer, SimplePythonParser};
use crate::config::files_to_be_checked; use crate::config::files_to_be_checked;
@ -17,7 +19,13 @@ fn run() {
lang_server.run(); lang_server.run();
} else { } else {
let mut code = 0; let mut code = 0;
let files = files_to_be_checked(); let (files, invalid_files) = files_to_be_checked();
for invalid_file in invalid_files {
if code == 0 {
code = 1;
}
println!("{RED}Invalid file or pattern{RESET}: {invalid_file}");
}
if files.is_empty() { if files.is_empty() {
let mut analyzer = PythonAnalyzer::new(cfg); let mut analyzer = PythonAnalyzer::new(cfg);
code = analyzer.run(); code = analyzer.run();