diff --git a/crates/ruff_linter/src/preview.rs b/crates/ruff_linter/src/preview.rs index 5829ced5a5..5ed57bf062 100644 --- a/crates/ruff_linter/src/preview.rs +++ b/crates/ruff_linter/src/preview.rs @@ -249,11 +249,6 @@ pub(crate) const fn is_maxsplit_without_separator_fix_enabled(settings: &LinterS settings.preview.is_enabled() } -// https://github.com/astral-sh/ruff/pull/20106 -pub(crate) const fn is_bidi_forbid_arabic_letter_mark_enabled(settings: &LinterSettings) -> bool { - settings.preview.is_enabled() -} - // https://github.com/astral-sh/ruff/pull/20027 pub(crate) const fn is_unnecessary_default_type_args_stubs_enabled( settings: &LinterSettings, diff --git a/crates/ruff_linter/src/rules/pylint/mod.rs b/crates/ruff_linter/src/rules/pylint/mod.rs index e181c0a146..101c92a16b 100644 --- a/crates/ruff_linter/src/rules/pylint/mod.rs +++ b/crates/ruff_linter/src/rules/pylint/mod.rs @@ -252,30 +252,6 @@ mod tests { Ok(()) } - #[test_case(Rule::BidirectionalUnicode, Path::new("bidirectional_unicode.py"))] - fn preview_rules(rule_code: Rule, path: &Path) -> Result<()> { - let snapshot = format!( - "preview__{}_{}", - rule_code.noqa_code(), - path.to_string_lossy() - ); - let diagnostics = test_path( - Path::new("pylint").join(path).as_path(), - &LinterSettings { - pylint: pylint::settings::Settings { - allow_dunder_method_names: FxHashSet::from_iter([ - "__special_custom_magic__".to_string() - ]), - ..pylint::settings::Settings::default() - }, - preview: PreviewMode::Enabled, - ..LinterSettings::for_rule(rule_code) - }, - )?; - assert_diagnostics!(snapshot, diagnostics); - Ok(()) - } - #[test] fn continue_in_finally() -> Result<()> { let diagnostics = test_path( diff --git a/crates/ruff_linter/src/rules/pylint/rules/bidirectional_unicode.rs b/crates/ruff_linter/src/rules/pylint/rules/bidirectional_unicode.rs index 0a80f28b45..11ac152258 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/bidirectional_unicode.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/bidirectional_unicode.rs @@ -1,11 +1,9 @@ use ruff_macros::{ViolationMetadata, derive_message_formats}; use ruff_source_file::Line; -use crate::{ - Violation, checkers::ast::LintContext, preview::is_bidi_forbid_arabic_letter_mark_enabled, -}; +use crate::{Violation, checkers::ast::LintContext}; -const BIDI_UNICODE: [char; 10] = [ +const BIDI_UNICODE: [char; 11] = [ '\u{202A}', //{LEFT-TO-RIGHT EMBEDDING} '\u{202B}', //{RIGHT-TO-LEFT EMBEDDING} '\u{202C}', //{POP DIRECTIONAL FORMATTING} @@ -19,6 +17,7 @@ const BIDI_UNICODE: [char; 10] = [ // https://peps.python.org/pep-0672/ // so the list above might not be complete '\u{200F}', //{RIGHT-TO-LEFT MARK} + '\u{061C}', //{ARABIC LETTER MARK} // We don't use // "\u200E" # \n{LEFT-TO-RIGHT MARK} // as this is the default for latin files and can't be used @@ -62,12 +61,7 @@ impl Violation for BidirectionalUnicode { /// PLE2502 pub(crate) fn bidirectional_unicode(line: &Line, context: &LintContext) { - if line.contains(BIDI_UNICODE) - || (is_bidi_forbid_arabic_letter_mark_enabled(context.settings()) - && line.contains( - '\u{061C}', //{ARABIC LETTER MARK} - )) - { + if line.contains(BIDI_UNICODE) { context.report_diagnostic(BidirectionalUnicode, line.full_range()); } } diff --git a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLE2502_bidirectional_unicode.py.snap b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLE2502_bidirectional_unicode.py.snap index 0d584e8108..4a1555ebe8 100644 --- a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLE2502_bidirectional_unicode.py.snap +++ b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLE2502_bidirectional_unicode.py.snap @@ -21,6 +21,16 @@ PLE2502 Contains control characters that can permit obfuscated code 7 | # E2502 | +PLE2502 Contains control characters that can permit obfuscated code + --> bidirectional_unicode.py:8:1 + | + 7 | # E2502 + 8 | another = "x؜" * 50 # "؜x" is assigned + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + 9 | +10 | # E2502 + | + PLE2502 Contains control characters that can permit obfuscated code --> bidirectional_unicode.py:11:1 | diff --git a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__preview__PLE2502_bidirectional_unicode.py.snap b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__preview__PLE2502_bidirectional_unicode.py.snap deleted file mode 100644 index 4a1555ebe8..0000000000 --- a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__preview__PLE2502_bidirectional_unicode.py.snap +++ /dev/null @@ -1,52 +0,0 @@ ---- -source: crates/ruff_linter/src/rules/pylint/mod.rs ---- -PLE2502 Contains control characters that can permit obfuscated code - --> bidirectional_unicode.py:2:1 - | -1 | # E2502 -2 | print("שלום") - | ^^^^^^^^^^^^^ -3 | -4 | # E2502 - | - -PLE2502 Contains control characters that can permit obfuscated code - --> bidirectional_unicode.py:5:1 - | -4 | # E2502 -5 | example = "x‏" * 100 # "‏x" is assigned - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -6 | -7 | # E2502 - | - -PLE2502 Contains control characters that can permit obfuscated code - --> bidirectional_unicode.py:8:1 - | - 7 | # E2502 - 8 | another = "x؜" * 50 # "؜x" is assigned - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 9 | -10 | # E2502 - | - -PLE2502 Contains control characters that can permit obfuscated code - --> bidirectional_unicode.py:11:1 - | -10 | # E2502 -11 | if access_level != "none": # Check if admin ' and access_level != 'user - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -12 | print("You are an admin.") - | - -PLE2502 Contains control characters that can permit obfuscated code - --> bidirectional_unicode.py:17:1 - | -15 | # E2502 -16 | def subtract_funds(account: str, amount: int): -17 | """Subtract funds from bank account then """ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -18 | return -19 | bank[account] -= amount - |