From f1e0e6c1857659a47e543b00af83ca2bc3e4a727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Riegel?= Date: Sat, 22 Feb 2025 00:57:08 +0100 Subject: [PATCH] fix: exit 1 when providing invalid file or patterns --- src/config.rs | 33 ++++++++++++++++++++++++++------- src/main.rs | 10 +++++++++- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/config.rs b/src/config.rs index 6cc14e0..e1249ca 100644 --- a/src/config.rs +++ b/src/config.rs @@ -214,24 +214,43 @@ For more information try `pylyzer --help`" cfg } -pub(crate) fn files_to_be_checked() -> Vec { +pub(crate) fn files_to_be_checked() -> (Vec, Vec) { 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(), + ) } diff --git a/src/main.rs b/src/main.rs index 2cc7515..f97b685 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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();