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
}
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()
.skip(1)
.rev()
.take_while(|arg| !arg.starts_with("-"));
let mut files = HashSet::new();
let mut invalid_files = HashSet::new();
for file_or_pattern in file_or_patterns {
if PathBuf::from(&file_or_pattern).is_file() {
files.insert(PathBuf::from(&file_or_pattern));
} else {
for entry in glob::glob(&file_or_pattern).expect("Failed to read glob pattern") {
match entry {
Err(e) => eprintln!("err: {e}"),
Ok(path) if path.is_file() => {files.insert(path);},
_ => {}
let entries = glob::glob(&file_or_pattern);
match entries {
Err(_) => {
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 erg_common::config::ErgMode;
use erg_common::spawn::exec_new_thread;
use erg_common::style::colors::RED;
use erg_common::style::RESET;
use pylyzer_core::{PythonAnalyzer, SimplePythonParser};
use crate::config::files_to_be_checked;
@ -17,7 +19,13 @@ fn run() {
lang_server.run();
} else {
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() {
let mut analyzer = PythonAnalyzer::new(cfg);
code = analyzer.run();