diff --git a/crates/oxc_cli/src/lint/mod.rs b/crates/oxc_cli/src/lint/mod.rs index ca9a85acd..54388fdc9 100644 --- a/crates/oxc_cli/src/lint/mod.rs +++ b/crates/oxc_cli/src/lint/mod.rs @@ -33,6 +33,10 @@ impl Runner for LintRunner { misc_options, } = self.options; + if paths.is_empty() { + return CliRunResult::InvalidOptions { message: "No paths provided.".to_string() }; + } + let now = std::time::Instant::now(); let paths = Walk::new(&paths, &ignore_options).paths(); diff --git a/crates/oxc_cli/src/result.rs b/crates/oxc_cli/src/result.rs index 355030c2f..cd90e14ee 100644 --- a/crates/oxc_cli/src/result.rs +++ b/crates/oxc_cli/src/result.rs @@ -7,6 +7,7 @@ use std::{ #[derive(Debug)] pub enum CliRunResult { None, + InvalidOptions { message: String }, PathNotFound { paths: Vec }, LintResult(LintResult), TypeCheckResult { duration: Duration, number_of_diagnostics: usize }, @@ -26,6 +27,10 @@ impl Termination for CliRunResult { fn report(self) -> ExitCode { match self { Self::None => ExitCode::from(0), + Self::InvalidOptions { message } => { + println!("Invalid Options: {message}"); + ExitCode::from(1) + } Self::PathNotFound { paths } => { println!("Path {paths:?} does not exist."); ExitCode::from(1) diff --git a/crates/oxc_cli/src/walk.rs b/crates/oxc_cli/src/walk.rs index 0271b6d83..f8ee86d5a 100644 --- a/crates/oxc_cli/src/walk.rs +++ b/crates/oxc_cli/src/walk.rs @@ -52,6 +52,8 @@ impl ignore::ParallelVisitor for WalkCollector { impl Walk { /// # Panics pub fn new(paths: &[PathBuf], options: &IgnoreOptions) -> Self { + assert!(!paths.is_empty(), "At least one path must be provided to Walk::new"); + let paths = paths .iter() .map(|p| p.canonicalize().unwrap_or_else(|_| p.clone()))