From 0694aee1b6bbfb04bbf960c4d57718f95d10ba29 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Fri, 24 Feb 2023 17:55:32 -0500 Subject: [PATCH] Avoid EXE001 and EXE002 errors from stdin input (#3218) --- crates/ruff/src/rules/flake8_executable/helpers.rs | 10 +++++----- .../rules/flake8_executable/rules/shebang_missing.rs | 7 +++---- .../flake8_executable/rules/shebang_not_executable.rs | 9 +++------ 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/crates/ruff/src/rules/flake8_executable/helpers.rs b/crates/ruff/src/rules/flake8_executable/helpers.rs index 26a13ec972..5338486acd 100644 --- a/crates/ruff/src/rules/flake8_executable/helpers.rs +++ b/crates/ruff/src/rules/flake8_executable/helpers.rs @@ -1,4 +1,6 @@ #[cfg(target_family = "unix")] +use anyhow::Result; +#[cfg(target_family = "unix")] use std::os::unix::fs::PermissionsExt; #[cfg(target_family = "unix")] use std::path::Path; @@ -39,13 +41,11 @@ pub fn extract_shebang(line: &str) -> ShebangDirective { } #[cfg(target_family = "unix")] -pub fn is_executable(filepath: &Path) -> bool { +pub fn is_executable(filepath: &Path) -> Result { { - let Ok(metadata) = filepath.metadata() else { - return false; - }; + let metadata = filepath.metadata()?; let permissions = metadata.permissions(); - permissions.mode() & 0o111 != 0 + Ok(permissions.mode() & 0o111 != 0) } } diff --git a/crates/ruff/src/rules/flake8_executable/rules/shebang_missing.rs b/crates/ruff/src/rules/flake8_executable/rules/shebang_missing.rs index bbeb5d32b5..2b41916a35 100644 --- a/crates/ruff/src/rules/flake8_executable/rules/shebang_missing.rs +++ b/crates/ruff/src/rules/flake8_executable/rules/shebang_missing.rs @@ -23,12 +23,11 @@ impl Violation for ShebangMissingExecutableFile { /// EXE002 #[cfg(target_family = "unix")] pub fn shebang_missing(filepath: &Path) -> Option { - if is_executable(filepath) { + if let Ok(true) = is_executable(filepath) { let diagnostic = Diagnostic::new(ShebangMissingExecutableFile, Range::default()); - Some(diagnostic) - } else { - None + return Some(diagnostic); } + None } #[cfg(not(target_family = "unix"))] diff --git a/crates/ruff/src/rules/flake8_executable/rules/shebang_not_executable.rs b/crates/ruff/src/rules/flake8_executable/rules/shebang_not_executable.rs index 3f369a2523..5ad400610a 100644 --- a/crates/ruff/src/rules/flake8_executable/rules/shebang_not_executable.rs +++ b/crates/ruff/src/rules/flake8_executable/rules/shebang_not_executable.rs @@ -31,9 +31,7 @@ pub fn shebang_not_executable( shebang: &ShebangDirective, ) -> Option { if let ShebangDirective::Match(_, start, end, _) = shebang { - if is_executable(filepath) { - None - } else { + if let Ok(false) = is_executable(filepath) { let diagnostic = Diagnostic::new( ShebangNotExecutable, Range::new( @@ -41,11 +39,10 @@ pub fn shebang_not_executable( Location::new(lineno + 1, *end), ), ); - Some(diagnostic) + return Some(diagnostic); } - } else { - None } + None } #[cfg(not(target_family = "unix"))]