From 4029a25ebd88a26424f45b20aba20c8e56a54d62 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Thu, 27 Jun 2024 11:24:45 +0100 Subject: [PATCH] [Ruff v0.5] Stabilise 15 pylint rules (#12051) --- crates/ruff_linter/src/codes.rs | 30 +++++++-------- .../src/rules/pylint/rules/bad_open_mode.rs | 2 +- .../rules/pylint/rules/literal_membership.rs | 2 +- .../pylint/rules/non_ascii_module_import.rs | 14 +++---- .../src/rules/pylint/rules/non_ascii_name.rs | 8 +++- .../pylint/rules/potential_index_error.rs | 2 +- .../pylint/rules/super_without_brackets.rs | 13 ++++--- .../rules/unnecessary_list_index_lookup.rs | 4 +- .../rules/pylint/rules/useless_with_lock.rs | 3 +- ...int__tests__PLC2401_non_ascii_name.py.snap | 29 ++++++++------ ...s__PLC2403_non_ascii_module_import.py.snap | 14 ++++--- ...sts__PLE0643_potential_index_error.py.snap | 10 ++--- ...1736_unnecessary_list_index_lookup.py.snap | 38 +++++++++---------- ..._tests__PLR6201_literal_membership.py.snap | 10 ++--- 14 files changed, 95 insertions(+), 84 deletions(-) diff --git a/crates/ruff_linter/src/codes.rs b/crates/ruff_linter/src/codes.rs index 945cd2fe88fe0..4ca985e2d3b77 100644 --- a/crates/ruff_linter/src/codes.rs +++ b/crates/ruff_linter/src/codes.rs @@ -191,14 +191,14 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Pylint, "C0414") => (RuleGroup::Stable, rules::pylint::rules::UselessImportAlias), (Pylint, "C0415") => (RuleGroup::Preview, rules::pylint::rules::ImportOutsideTopLevel), (Pylint, "C1901") => (RuleGroup::Preview, rules::pylint::rules::CompareToEmptyString), - (Pylint, "C2401") => (RuleGroup::Preview, rules::pylint::rules::NonAsciiName), - (Pylint, "C2403") => (RuleGroup::Preview, rules::pylint::rules::NonAsciiImportName), + (Pylint, "C2401") => (RuleGroup::Stable, rules::pylint::rules::NonAsciiName), + (Pylint, "C2403") => (RuleGroup::Stable, rules::pylint::rules::NonAsciiImportName), (Pylint, "C2701") => (RuleGroup::Preview, rules::pylint::rules::ImportPrivateName), (Pylint, "C2801") => (RuleGroup::Preview, rules::pylint::rules::UnnecessaryDunderCall), (Pylint, "C3002") => (RuleGroup::Stable, rules::pylint::rules::UnnecessaryDirectLambdaCall), (Pylint, "E0100") => (RuleGroup::Stable, rules::pylint::rules::YieldInInit), (Pylint, "E0101") => (RuleGroup::Stable, rules::pylint::rules::ReturnInInit), - (Pylint, "E0115") => (RuleGroup::Preview, rules::pylint::rules::NonlocalAndGlobal), + (Pylint, "E0115") => (RuleGroup::Stable, rules::pylint::rules::NonlocalAndGlobal), (Pylint, "E0116") => (RuleGroup::Stable, rules::pylint::rules::ContinueInFinally), (Pylint, "E0117") => (RuleGroup::Stable, rules::pylint::rules::NonlocalWithoutBinding), (Pylint, "E0118") => (RuleGroup::Stable, rules::pylint::rules::LoadBeforeGlobalDeclaration), @@ -213,9 +213,9 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Pylint, "E0309") => (RuleGroup::Preview, rules::pylint::rules::InvalidHashReturnType), (Pylint, "E0604") => (RuleGroup::Stable, rules::pylint::rules::InvalidAllObject), (Pylint, "E0605") => (RuleGroup::Stable, rules::pylint::rules::InvalidAllFormat), - (Pylint, "E0643") => (RuleGroup::Preview, rules::pylint::rules::PotentialIndexError), - (Pylint, "E0704") => (RuleGroup::Preview, rules::pylint::rules::MisplacedBareRaise), - (Pylint, "E1132") => (RuleGroup::Preview, rules::pylint::rules::RepeatedKeywordArgument), + (Pylint, "E0643") => (RuleGroup::Stable, rules::pylint::rules::PotentialIndexError), + (Pylint, "E0704") => (RuleGroup::Stable, rules::pylint::rules::MisplacedBareRaise), + (Pylint, "E1132") => (RuleGroup::Stable, rules::pylint::rules::RepeatedKeywordArgument), (Pylint, "E1141") => (RuleGroup::Preview, rules::pylint::rules::DictIterMissingItems), (Pylint, "E1142") => (RuleGroup::Stable, rules::pylint::rules::AwaitOutsideAsync), (Pylint, "E1205") => (RuleGroup::Stable, rules::pylint::rules::LoggingTooManyArgs), @@ -250,16 +250,16 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Pylint, "R0917") => (RuleGroup::Preview, rules::pylint::rules::TooManyPositional), (Pylint, "R1701") => (RuleGroup::Removed, rules::pylint::rules::RepeatedIsinstanceCalls), (Pylint, "R1702") => (RuleGroup::Preview, rules::pylint::rules::TooManyNestedBlocks), - (Pylint, "R1704") => (RuleGroup::Preview, rules::pylint::rules::RedefinedArgumentFromLocal), + (Pylint, "R1704") => (RuleGroup::Stable, rules::pylint::rules::RedefinedArgumentFromLocal), (Pylint, "R1706") => (RuleGroup::Removed, rules::pylint::rules::AndOrTernary), (Pylint, "R1711") => (RuleGroup::Stable, rules::pylint::rules::UselessReturn), (Pylint, "R1714") => (RuleGroup::Stable, rules::pylint::rules::RepeatedEqualityComparison), (Pylint, "R1722") => (RuleGroup::Stable, rules::pylint::rules::SysExitAlias), (Pylint, "R1730") => (RuleGroup::Preview, rules::pylint::rules::IfStmtMinMax), (Pylint, "R1733") => (RuleGroup::Preview, rules::pylint::rules::UnnecessaryDictIndexLookup), - (Pylint, "R1736") => (RuleGroup::Preview, rules::pylint::rules::UnnecessaryListIndexLookup), + (Pylint, "R1736") => (RuleGroup::Stable, rules::pylint::rules::UnnecessaryListIndexLookup), (Pylint, "R2004") => (RuleGroup::Stable, rules::pylint::rules::MagicValueComparison), - (Pylint, "R2044") => (RuleGroup::Preview, rules::pylint::rules::EmptyComment), + (Pylint, "R2044") => (RuleGroup::Stable, rules::pylint::rules::EmptyComment), (Pylint, "R5501") => (RuleGroup::Stable, rules::pylint::rules::CollapsibleElseIf), (Pylint, "R6104") => (RuleGroup::Preview, rules::pylint::rules::NonAugmentedAssignment), (Pylint, "R6201") => (RuleGroup::Preview, rules::pylint::rules::LiteralMembership), @@ -268,25 +268,25 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Pylint, "W0177") => (RuleGroup::Preview, rules::pylint::rules::NanComparison), (Pylint, "W0120") => (RuleGroup::Stable, rules::pylint::rules::UselessElseOnLoop), (Pylint, "W0127") => (RuleGroup::Stable, rules::pylint::rules::SelfAssigningVariable), - (Pylint, "W0128") => (RuleGroup::Preview, rules::pylint::rules::RedeclaredAssignedName), + (Pylint, "W0128") => (RuleGroup::Stable, rules::pylint::rules::RedeclaredAssignedName), (Pylint, "W0129") => (RuleGroup::Stable, rules::pylint::rules::AssertOnStringLiteral), (Pylint, "W0131") => (RuleGroup::Stable, rules::pylint::rules::NamedExprWithoutContext), - (Pylint, "W0133") => (RuleGroup::Preview, rules::pylint::rules::UselessExceptionStatement), + (Pylint, "W0133") => (RuleGroup::Stable, rules::pylint::rules::UselessExceptionStatement), (Pylint, "W0211") => (RuleGroup::Preview, rules::pylint::rules::BadStaticmethodArgument), - (Pylint, "W0245") => (RuleGroup::Preview, rules::pylint::rules::SuperWithoutBrackets), + (Pylint, "W0245") => (RuleGroup::Stable, rules::pylint::rules::SuperWithoutBrackets), (Pylint, "W0406") => (RuleGroup::Stable, rules::pylint::rules::ImportSelf), (Pylint, "W0602") => (RuleGroup::Stable, rules::pylint::rules::GlobalVariableNotAssigned), (Pylint, "W0603") => (RuleGroup::Stable, rules::pylint::rules::GlobalStatement), - (Pylint, "W0604") => (RuleGroup::Preview, rules::pylint::rules::GlobalAtModuleLevel), + (Pylint, "W0604") => (RuleGroup::Stable, rules::pylint::rules::GlobalAtModuleLevel), (Pylint, "W0642") => (RuleGroup::Preview, rules::pylint::rules::SelfOrClsAssignment), (Pylint, "W0711") => (RuleGroup::Stable, rules::pylint::rules::BinaryOpException), - (Pylint, "W1501") => (RuleGroup::Preview, rules::pylint::rules::BadOpenMode), + (Pylint, "W1501") => (RuleGroup::Stable, rules::pylint::rules::BadOpenMode), (Pylint, "W1508") => (RuleGroup::Stable, rules::pylint::rules::InvalidEnvvarDefault), (Pylint, "W1509") => (RuleGroup::Stable, rules::pylint::rules::SubprocessPopenPreexecFn), (Pylint, "W1510") => (RuleGroup::Stable, rules::pylint::rules::SubprocessRunWithoutCheck), (Pylint, "W1514") => (RuleGroup::Preview, rules::pylint::rules::UnspecifiedEncoding), (Pylint, "W1641") => (RuleGroup::Preview, rules::pylint::rules::EqWithoutHash), - (Pylint, "W2101") => (RuleGroup::Preview, rules::pylint::rules::UselessWithLock), + (Pylint, "W2101") => (RuleGroup::Stable, rules::pylint::rules::UselessWithLock), (Pylint, "W2901") => (RuleGroup::Stable, rules::pylint::rules::RedefinedLoopName), (Pylint, "W3201") => (RuleGroup::Preview, rules::pylint::rules::BadDunderMethodName), (Pylint, "W3301") => (RuleGroup::Stable, rules::pylint::rules::NestedMinMax), diff --git a/crates/ruff_linter/src/rules/pylint/rules/bad_open_mode.rs b/crates/ruff_linter/src/rules/pylint/rules/bad_open_mode.rs index 89fd517977fa9..0b66cab8cef06 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/bad_open_mode.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/bad_open_mode.rs @@ -59,7 +59,7 @@ pub(crate) fn bad_open_mode(checker: &mut Checker, call: &ast::ExprCall) { return; }; - let Some(ast::ExprStringLiteral { value, .. }) = mode.as_string_literal_expr() else { + let ast::Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = mode else { return; }; diff --git a/crates/ruff_linter/src/rules/pylint/rules/literal_membership.rs b/crates/ruff_linter/src/rules/pylint/rules/literal_membership.rs index 6759eb6983be8..7d0031ab06548 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/literal_membership.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/literal_membership.rs @@ -37,7 +37,7 @@ pub struct LiteralMembership; impl AlwaysFixableViolation for LiteralMembership { #[derive_message_formats] fn message(&self) -> String { - format!("Use a `set` literal when testing for membership") + format!("Use a set literal when testing for membership") } fn fix_title(&self) -> String { diff --git a/crates/ruff_linter/src/rules/pylint/rules/non_ascii_module_import.rs b/crates/ruff_linter/src/rules/pylint/rules/non_ascii_module_import.rs index 577a4b69f19f1..a34fcf0cda37d 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/non_ascii_module_import.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/non_ascii_module_import.rs @@ -41,20 +41,20 @@ impl Violation for NonAsciiImportName { let Self { name, kind } = self; match kind { Kind::Aliased => { - format!( - "Module alias `{name}` contains a non-ASCII character, use an ASCII-only alias" - ) + format!("Module alias `{name}` contains a non-ASCII character") } Kind::Unaliased => { - format!( - "Module name `{name}` contains a non-ASCII character, use an ASCII-only alias" - ) + format!("Module name `{name}` contains a non-ASCII character") } } } + + fn fix_title(&self) -> Option { + Some("Use an ASCII-only alias".to_string()) + } } -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] enum Kind { /// The import uses a non-ASCII alias (e.g., `import foo as bár`). Aliased, diff --git a/crates/ruff_linter/src/rules/pylint/rules/non_ascii_name.rs b/crates/ruff_linter/src/rules/pylint/rules/non_ascii_name.rs index 1aaff45b863ab..3aad4f51fb548 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/non_ascii_name.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/non_ascii_name.rs @@ -34,7 +34,11 @@ impl Violation for NonAsciiName { #[derive_message_formats] fn message(&self) -> String { let Self { name, kind } = self; - format!("{kind} name `{name}` contains a non-ASCII character, consider renaming it") + format!("{kind} name `{name}` contains a non-ASCII character") + } + + fn fix_title(&self) -> Option { + Some("Rename the variable using ASCII characters".to_string()) } } @@ -82,7 +86,7 @@ pub(crate) fn non_ascii_name(binding: &Binding, locator: &Locator) -> Option String { - format!("Potential IndexError") + format!("Expression is likely to raise `IndexError`") } } diff --git a/crates/ruff_linter/src/rules/pylint/rules/super_without_brackets.rs b/crates/ruff_linter/src/rules/pylint/rules/super_without_brackets.rs index 81f9c0e44ba9f..d98271f5afce3 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/super_without_brackets.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/super_without_brackets.rs @@ -8,11 +8,14 @@ use ruff_text_size::Ranged; use crate::checkers::ast::Checker; /// ## What it does -/// Checks for `super` calls without parentheses. +/// Detects attempts to use `super` without parentheses. /// /// ## Why is this bad? -/// When `super` is used without parentheses, it is not an actual call, and -/// thus has no effect. +/// The [`super()` callable](https://docs.python.org/3/library/functions.html#super) +/// can be used inside method definitions to create a proxy object that +/// delegates attribute access to a superclass of the current class. Attempting +/// to access attributes on `super` itself, however, instead of the object +/// returned by a call to `super()`, will raise `AttributeError`. /// /// ## Example /// ```python @@ -25,7 +28,7 @@ use crate::checkers::ast::Checker; /// class Dog(Animal): /// @staticmethod /// def speak(): -/// original_speak = super.speak() +/// original_speak = super.speak() # ERROR: `super.speak()` /// return f"{original_speak} But as a dog, it barks!" /// ``` /// @@ -40,7 +43,7 @@ use crate::checkers::ast::Checker; /// class Dog(Animal): /// @staticmethod /// def speak(): -/// original_speak = super().speak() +/// original_speak = super().speak() # Correct: `super().speak()` /// return f"{original_speak} But as a dog, it barks!" /// ``` #[violation] diff --git a/crates/ruff_linter/src/rules/pylint/rules/unnecessary_list_index_lookup.rs b/crates/ruff_linter/src/rules/pylint/rules/unnecessary_list_index_lookup.rs index 64e966e515959..1203378999ffe 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/unnecessary_list_index_lookup.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/unnecessary_list_index_lookup.rs @@ -37,11 +37,11 @@ pub struct UnnecessaryListIndexLookup; impl AlwaysFixableViolation for UnnecessaryListIndexLookup { #[derive_message_formats] fn message(&self) -> String { - format!("Unnecessary lookup of list item by index") + format!("List index lookup in `enumerate()` loop") } fn fix_title(&self) -> String { - format!("Use existing variable") + format!("Use the loop variable directly") } } diff --git a/crates/ruff_linter/src/rules/pylint/rules/useless_with_lock.rs b/crates/ruff_linter/src/rules/pylint/rules/useless_with_lock.rs index 9d949c9ca7762..3abb3a493485c 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/useless_with_lock.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/useless_with_lock.rs @@ -6,7 +6,8 @@ use ruff_text_size::Ranged; use crate::checkers::ast::Checker; /// ## What it does -/// Checks for direct uses of lock objects in `with` statements. +/// Checks for lock objects that are created and immediately discarded in +/// `with` statements. /// /// ## Why is this bad? /// Creating a lock (via `threading.Lock` or similar) in a `with` statement diff --git a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLC2401_non_ascii_name.py.snap b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLC2401_non_ascii_name.py.snap index 1ef5432f9575f..7c7ac5e96ebaf 100644 --- a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLC2401_non_ascii_name.py.snap +++ b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLC2401_non_ascii_name.py.snap @@ -1,23 +1,25 @@ --- source: crates/ruff_linter/src/rules/pylint/mod.rs --- -non_ascii_name.py:1:1: PLC2401 Variable name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:1:1: PLC2401 Variable name `ápple_count` contains a non-ASCII character | 1 | ápple_count: int = 1 # C2401 | ^^^^^^^^^^^ PLC2401 2 | ápple_count += 2 # C2401 3 | ápple_count = 3 # C2401 | + = help: Rename the variable using ASCII characters -non_ascii_name.py:2:1: PLC2401 Variable name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:2:1: PLC2401 Variable name `ápple_count` contains a non-ASCII character | 1 | ápple_count: int = 1 # C2401 2 | ápple_count += 2 # C2401 | ^^^^^^^^^^^ PLC2401 3 | ápple_count = 3 # C2401 | + = help: Rename the variable using ASCII characters -non_ascii_name.py:3:1: PLC2401 Variable name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:3:1: PLC2401 Variable name `ápple_count` contains a non-ASCII character | 1 | ápple_count: int = 1 # C2401 2 | ápple_count += 2 # C2401 @@ -26,47 +28,53 @@ non_ascii_name.py:3:1: PLC2401 Variable name `ápple_count` contains a non-ASCII 4 | 5 | (ápple_count for ápple_count in y) | + = help: Rename the variable using ASCII characters -non_ascii_name.py:5:18: PLC2401 Variable name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:5:18: PLC2401 Variable name `ápple_count` contains a non-ASCII character | 3 | ápple_count = 3 # C2401 4 | 5 | (ápple_count for ápple_count in y) | ^^^^^^^^^^^ PLC2401 | + = help: Rename the variable using ASCII characters -non_ascii_name.py:8:10: PLC2401 Argument name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:8:10: PLC2401 Argument name `ápple_count` contains a non-ASCII character | 8 | def func(ápple_count): | ^^^^^^^^^^^ PLC2401 9 | global ápple_count 10 | nonlocal ápple_count | + = help: Rename the variable using ASCII characters -non_ascii_name.py:9:12: PLC2401 Global name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:9:12: PLC2401 Global name `ápple_count` contains a non-ASCII character | 8 | def func(ápple_count): 9 | global ápple_count | ^^^^^^^^^^^ PLC2401 10 | nonlocal ápple_count | + = help: Rename the variable using ASCII characters -non_ascii_name.py:13:5: PLC2401 Function name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:13:5: PLC2401 Function name `ápple_count` contains a non-ASCII character | 13 | def ápple_count(): | ^^^^^^^^^^^ PLC2401 14 | pass | + = help: Rename the variable using ASCII characters -non_ascii_name.py:18:10: PLC2401 Variable name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:18:10: PLC2401 Variable name `ápple_count` contains a non-ASCII character | 17 | match ápple_count: 18 | case ápple_count: | ^^^^^^^^^^^ PLC2401 19 | pass | + = help: Rename the variable using ASCII characters -non_ascii_name.py:21:1: PLC2401 Annotation name `ápple_count` contains a non-ASCII character, consider renaming it +non_ascii_name.py:21:1: PLC2401 Annotation name `ápple_count` contains a non-ASCII character | 19 | pass 20 | @@ -75,5 +83,4 @@ non_ascii_name.py:21:1: PLC2401 Annotation name `ápple_count` contains a non-AS 22 | 23 | try: | - - + = help: Rename the variable using ASCII characters diff --git a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLC2403_non_ascii_module_import.py.snap b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLC2403_non_ascii_module_import.py.snap index 31350f4ba9966..6d8a7c610b873 100644 --- a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLC2403_non_ascii_module_import.py.snap +++ b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLC2403_non_ascii_module_import.py.snap @@ -1,14 +1,15 @@ --- source: crates/ruff_linter/src/rules/pylint/mod.rs --- -non_ascii_module_import.py:1:29: PLC2403 Module alias `łos` contains a non-ASCII character, use an ASCII-only alias +non_ascii_module_import.py:1:29: PLC2403 Module alias `łos` contains a non-ASCII character | 1 | from os.path import join as łos # Error | ^^^ PLC2403 2 | from os.path import join as los # OK | + = help: Use an ASCII-only alias -non_ascii_module_import.py:4:24: PLC2403 Module alias `łos` contains a non-ASCII character, use an ASCII-only alias +non_ascii_module_import.py:4:24: PLC2403 Module alias `łos` contains a non-ASCII character | 2 | from os.path import join as los # OK 3 | @@ -16,8 +17,9 @@ non_ascii_module_import.py:4:24: PLC2403 Module alias `łos` contains a non-ASCI | ^^^ PLC2403 5 | import os.path.join as los # OK | + = help: Use an ASCII-only alias -non_ascii_module_import.py:7:8: PLC2403 Module name `os.path.łos` contains a non-ASCII character, use an ASCII-only alias +non_ascii_module_import.py:7:8: PLC2403 Module name `os.path.łos` contains a non-ASCII character | 5 | import os.path.join as los # OK 6 | @@ -25,8 +27,9 @@ non_ascii_module_import.py:7:8: PLC2403 Module name `os.path.łos` contains a no | ^^^^^^^^^^^ PLC2403 8 | import os.path.los # OK | + = help: Use an ASCII-only alias -non_ascii_module_import.py:10:21: PLC2403 Module name `łos` contains a non-ASCII character, use an ASCII-only alias +non_ascii_module_import.py:10:21: PLC2403 Module name `łos` contains a non-ASCII character | 8 | import os.path.los # OK 9 | @@ -34,5 +37,4 @@ non_ascii_module_import.py:10:21: PLC2403 Module name `łos` contains a non-ASCI | ^^^ PLC2403 11 | from os.path import los # OK | - - + = help: Use an ASCII-only alias diff --git a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLE0643_potential_index_error.py.snap b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLE0643_potential_index_error.py.snap index 2cfa565dc5eb8..4c90ee3f58eaa 100644 --- a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLE0643_potential_index_error.py.snap +++ b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLE0643_potential_index_error.py.snap @@ -1,7 +1,7 @@ --- source: crates/ruff_linter/src/rules/pylint/mod.rs --- -potential_index_error.py:1:17: PLE0643 Potential IndexError +potential_index_error.py:1:17: PLE0643 Expression is likely to raise `IndexError` | 1 | print([1, 2, 3][3]) # PLE0643 | ^ PLE0643 @@ -9,7 +9,7 @@ potential_index_error.py:1:17: PLE0643 Potential IndexError 3 | print([1, 2, 3][999999999999999999999999999999999999999999]) # PLE0643 | -potential_index_error.py:2:17: PLE0643 Potential IndexError +potential_index_error.py:2:17: PLE0643 Expression is likely to raise `IndexError` | 1 | print([1, 2, 3][3]) # PLE0643 2 | print([1, 2, 3][-4]) # PLE0643 @@ -18,7 +18,7 @@ potential_index_error.py:2:17: PLE0643 Potential IndexError 4 | print([1, 2, 3][-999999999999999999999999999999999999999999]) # PLE0643 | -potential_index_error.py:3:17: PLE0643 Potential IndexError +potential_index_error.py:3:17: PLE0643 Expression is likely to raise `IndexError` | 1 | print([1, 2, 3][3]) # PLE0643 2 | print([1, 2, 3][-4]) # PLE0643 @@ -27,7 +27,7 @@ potential_index_error.py:3:17: PLE0643 Potential IndexError 4 | print([1, 2, 3][-999999999999999999999999999999999999999999]) # PLE0643 | -potential_index_error.py:4:17: PLE0643 Potential IndexError +potential_index_error.py:4:17: PLE0643 Expression is likely to raise `IndexError` | 2 | print([1, 2, 3][-4]) # PLE0643 3 | print([1, 2, 3][999999999999999999999999999999999999999999]) # PLE0643 @@ -36,5 +36,3 @@ potential_index_error.py:4:17: PLE0643 Potential IndexError 5 | 6 | print([1, 2, 3][2]) # OK | - - diff --git a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR1736_unnecessary_list_index_lookup.py.snap b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR1736_unnecessary_list_index_lookup.py.snap index 880422eab6674..a212e600b2cf7 100644 --- a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR1736_unnecessary_list_index_lookup.py.snap +++ b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR1736_unnecessary_list_index_lookup.py.snap @@ -1,7 +1,7 @@ --- source: crates/ruff_linter/src/rules/pylint/mod.rs --- -unnecessary_list_index_lookup.py:7:6: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:7:6: PLR1736 [*] List index lookup in `enumerate()` loop | 6 | def fix_these(): 7 | [letters[index] for index, letter in enumerate(letters)] # PLR1736 @@ -9,7 +9,7 @@ unnecessary_list_index_lookup.py:7:6: PLR1736 [*] Unnecessary lookup of list ite 8 | {letters[index] for index, letter in enumerate(letters)} # PLR1736 9 | {letter: letters[index] for index, letter in enumerate(letters)} # PLR1736 | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 4 4 | @@ -21,7 +21,7 @@ unnecessary_list_index_lookup.py:7:6: PLR1736 [*] Unnecessary lookup of list ite 9 9 | {letter: letters[index] for index, letter in enumerate(letters)} # PLR1736 10 10 | -unnecessary_list_index_lookup.py:8:6: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:8:6: PLR1736 [*] List index lookup in `enumerate()` loop | 6 | def fix_these(): 7 | [letters[index] for index, letter in enumerate(letters)] # PLR1736 @@ -29,7 +29,7 @@ unnecessary_list_index_lookup.py:8:6: PLR1736 [*] Unnecessary lookup of list ite | ^^^^^^^^^^^^^^ PLR1736 9 | {letter: letters[index] for index, letter in enumerate(letters)} # PLR1736 | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 5 5 | @@ -41,7 +41,7 @@ unnecessary_list_index_lookup.py:8:6: PLR1736 [*] Unnecessary lookup of list ite 10 10 | 11 11 | for index, letter in enumerate(letters): -unnecessary_list_index_lookup.py:9:14: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:9:14: PLR1736 [*] List index lookup in `enumerate()` loop | 7 | [letters[index] for index, letter in enumerate(letters)] # PLR1736 8 | {letters[index] for index, letter in enumerate(letters)} # PLR1736 @@ -50,7 +50,7 @@ unnecessary_list_index_lookup.py:9:14: PLR1736 [*] Unnecessary lookup of list it 10 | 11 | for index, letter in enumerate(letters): | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 6 6 | def fix_these(): @@ -62,7 +62,7 @@ unnecessary_list_index_lookup.py:9:14: PLR1736 [*] Unnecessary lookup of list it 11 11 | for index, letter in enumerate(letters): 12 12 | print(letters[index]) # PLR1736 -unnecessary_list_index_lookup.py:12:15: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:12:15: PLR1736 [*] List index lookup in `enumerate()` loop | 11 | for index, letter in enumerate(letters): 12 | print(letters[index]) # PLR1736 @@ -70,7 +70,7 @@ unnecessary_list_index_lookup.py:12:15: PLR1736 [*] Unnecessary lookup of list i 13 | blah = letters[index] # PLR1736 14 | assert letters[index] == "d" # PLR1736 | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 9 9 | {letter: letters[index] for index, letter in enumerate(letters)} # PLR1736 @@ -82,7 +82,7 @@ unnecessary_list_index_lookup.py:12:15: PLR1736 [*] Unnecessary lookup of list i 14 14 | assert letters[index] == "d" # PLR1736 15 15 | -unnecessary_list_index_lookup.py:13:16: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:13:16: PLR1736 [*] List index lookup in `enumerate()` loop | 11 | for index, letter in enumerate(letters): 12 | print(letters[index]) # PLR1736 @@ -90,7 +90,7 @@ unnecessary_list_index_lookup.py:13:16: PLR1736 [*] Unnecessary lookup of list i | ^^^^^^^^^^^^^^ PLR1736 14 | assert letters[index] == "d" # PLR1736 | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 10 10 | @@ -102,7 +102,7 @@ unnecessary_list_index_lookup.py:13:16: PLR1736 [*] Unnecessary lookup of list i 15 15 | 16 16 | for index, letter in builtins.enumerate(letters): -unnecessary_list_index_lookup.py:14:16: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:14:16: PLR1736 [*] List index lookup in `enumerate()` loop | 12 | print(letters[index]) # PLR1736 13 | blah = letters[index] # PLR1736 @@ -111,7 +111,7 @@ unnecessary_list_index_lookup.py:14:16: PLR1736 [*] Unnecessary lookup of list i 15 | 16 | for index, letter in builtins.enumerate(letters): | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 11 11 | for index, letter in enumerate(letters): @@ -123,7 +123,7 @@ unnecessary_list_index_lookup.py:14:16: PLR1736 [*] Unnecessary lookup of list i 16 16 | for index, letter in builtins.enumerate(letters): 17 17 | print(letters[index]) # PLR1736 -unnecessary_list_index_lookup.py:17:15: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:17:15: PLR1736 [*] List index lookup in `enumerate()` loop | 16 | for index, letter in builtins.enumerate(letters): 17 | print(letters[index]) # PLR1736 @@ -131,7 +131,7 @@ unnecessary_list_index_lookup.py:17:15: PLR1736 [*] Unnecessary lookup of list i 18 | blah = letters[index] # PLR1736 19 | assert letters[index] == "d" # PLR1736 | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 14 14 | assert letters[index] == "d" # PLR1736 @@ -143,7 +143,7 @@ unnecessary_list_index_lookup.py:17:15: PLR1736 [*] Unnecessary lookup of list i 19 19 | assert letters[index] == "d" # PLR1736 20 20 | -unnecessary_list_index_lookup.py:18:16: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:18:16: PLR1736 [*] List index lookup in `enumerate()` loop | 16 | for index, letter in builtins.enumerate(letters): 17 | print(letters[index]) # PLR1736 @@ -151,7 +151,7 @@ unnecessary_list_index_lookup.py:18:16: PLR1736 [*] Unnecessary lookup of list i | ^^^^^^^^^^^^^^ PLR1736 19 | assert letters[index] == "d" # PLR1736 | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 15 15 | @@ -163,14 +163,14 @@ unnecessary_list_index_lookup.py:18:16: PLR1736 [*] Unnecessary lookup of list i 20 20 | 21 21 | -unnecessary_list_index_lookup.py:19:16: PLR1736 [*] Unnecessary lookup of list item by index +unnecessary_list_index_lookup.py:19:16: PLR1736 [*] List index lookup in `enumerate()` loop | 17 | print(letters[index]) # PLR1736 18 | blah = letters[index] # PLR1736 19 | assert letters[index] == "d" # PLR1736 | ^^^^^^^^^^^^^^ PLR1736 | - = help: Use existing variable + = help: Use the loop variable directly ℹ Safe fix 16 16 | for index, letter in builtins.enumerate(letters): @@ -181,5 +181,3 @@ unnecessary_list_index_lookup.py:19:16: PLR1736 [*] Unnecessary lookup of list i 20 20 | 21 21 | 22 22 | def dont_fix_these(): - - diff --git a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR6201_literal_membership.py.snap b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR6201_literal_membership.py.snap index 6e9eaf609919e..98cd73be366af 100644 --- a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR6201_literal_membership.py.snap +++ b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR6201_literal_membership.py.snap @@ -1,7 +1,7 @@ --- source: crates/ruff_linter/src/rules/pylint/mod.rs --- -literal_membership.py:2:6: PLR6201 [*] Use a `set` literal when testing for membership +literal_membership.py:2:6: PLR6201 [*] Use a set literal when testing for membership | 1 | # Errors 2 | 1 in [1, 2, 3] @@ -19,7 +19,7 @@ literal_membership.py:2:6: PLR6201 [*] Use a `set` literal when testing for memb 4 4 | 1 in ( 5 5 | 1, 2, 3 -literal_membership.py:3:6: PLR6201 [*] Use a `set` literal when testing for membership +literal_membership.py:3:6: PLR6201 [*] Use a set literal when testing for membership | 1 | # Errors 2 | 1 in [1, 2, 3] @@ -39,7 +39,7 @@ literal_membership.py:3:6: PLR6201 [*] Use a `set` literal when testing for memb 5 5 | 1, 2, 3 6 6 | ) -literal_membership.py:4:6: PLR6201 [*] Use a `set` literal when testing for membership +literal_membership.py:4:6: PLR6201 [*] Use a set literal when testing for membership | 2 | 1 in [1, 2, 3] 3 | 1 in (1, 2, 3) @@ -66,7 +66,7 @@ literal_membership.py:4:6: PLR6201 [*] Use a `set` literal when testing for memb 8 8 | "cherry" in fruits 9 9 | _ = {key: value for key, value in {"a": 1, "b": 2}.items() if key in ("a", "b")} -literal_membership.py:9:70: PLR6201 [*] Use a `set` literal when testing for membership +literal_membership.py:9:70: PLR6201 [*] Use a set literal when testing for membership | 7 | fruits = ["cherry", "grapes"] 8 | "cherry" in fruits @@ -86,5 +86,3 @@ literal_membership.py:9:70: PLR6201 [*] Use a `set` literal when testing for mem 10 10 | 11 11 | # OK 12 12 | fruits in [[1, 2, 3], [4, 5, 6]] - -