diff --git a/crates/ruff_linter/src/rules/pep8_naming/mod.rs b/crates/ruff_linter/src/rules/pep8_naming/mod.rs index ff73c6d1ebbcfb..94341414fb466e 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/mod.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/mod.rs @@ -12,6 +12,7 @@ mod tests { use crate::registry::Rule; use crate::rules::pep8_naming; + use crate::rules::pep8_naming::settings::IgnoreNames; use crate::settings::types::IdentifierPattern; use crate::test::test_path; use crate::{assert_messages, settings}; @@ -148,12 +149,12 @@ mod tests { PathBuf::from_iter(["pep8_naming", "ignore_names", path]).as_path(), &settings::LinterSettings { pep8_naming: pep8_naming::settings::Settings { - ignore_names: vec![ + ignore_names: IgnoreNames::UserProvided(vec![ IdentifierPattern::new("*allowed*").unwrap(), IdentifierPattern::new("*Allowed*").unwrap(), IdentifierPattern::new("*ALLOWED*").unwrap(), IdentifierPattern::new("BA").unwrap(), // For N817. - ], + ]), ..Default::default() }, ..settings::LinterSettings::for_rule(rule_code) diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_acronym.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_acronym.rs index 29b746db208fc6..d5ac739a1843a1 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_acronym.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_acronym.rs @@ -6,7 +6,7 @@ use ruff_python_stdlib::str::{self}; use ruff_text_size::Ranged; use crate::rules::pep8_naming::helpers; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for `CamelCase` imports that are aliased as acronyms. @@ -54,12 +54,9 @@ pub(crate) fn camelcase_imported_as_acronym( asname: &str, alias: &Alias, stmt: &Stmt, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(asname)) - { + if ignore_names.matches(asname) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_constant.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_constant.rs index 651403e1f293dd..149f390068cecd 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_constant.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_constant.rs @@ -6,7 +6,7 @@ use ruff_python_stdlib::str::{self}; use ruff_text_size::Ranged; use crate::rules::pep8_naming::helpers; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for `CamelCase` imports that are aliased to constant-style names. @@ -51,12 +51,9 @@ pub(crate) fn camelcase_imported_as_constant( asname: &str, alias: &Alias, stmt: &Stmt, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if ignore_names.matches(asname) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_lowercase.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_lowercase.rs index 84aa326331bc94..9c729d1e2f922b 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_lowercase.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/camelcase_imported_as_lowercase.rs @@ -5,7 +5,7 @@ use ruff_macros::{derive_message_formats, violation}; use ruff_text_size::Ranged; use crate::rules::pep8_naming::helpers; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for `CamelCase` imports that are aliased to lowercase names. @@ -50,12 +50,9 @@ pub(crate) fn camelcase_imported_as_lowercase( asname: &str, alias: &Alias, stmt: &Stmt, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(asname)) - { + if ignore_names.matches(asname) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/constant_imported_as_non_constant.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/constant_imported_as_non_constant.rs index 6d85174bbc2687..e4b5ac819fafed 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/constant_imported_as_non_constant.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/constant_imported_as_non_constant.rs @@ -1,11 +1,10 @@ -use ruff_python_ast::{Alias, Stmt}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{Alias, Stmt}; use ruff_python_stdlib::str; use ruff_text_size::Ranged; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for constant imports that are aliased to non-constant-style @@ -51,12 +50,9 @@ pub(crate) fn constant_imported_as_non_constant( asname: &str, alias: &Alias, stmt: &Stmt, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if ignore_names.matches(asname) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/dunder_function_name.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/dunder_function_name.rs index 7089ed2d7dfe9c..ed623aad17c79a 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/dunder_function_name.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/dunder_function_name.rs @@ -6,7 +6,7 @@ use ruff_python_ast::identifier::Identifier; use ruff_python_semantic::analyze::visibility; use ruff_python_semantic::{Scope, ScopeKind}; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for functions with "dunder" names (that is, names with two @@ -47,7 +47,7 @@ pub(crate) fn dunder_function_name( scope: &Scope, stmt: &Stmt, name: &str, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { if matches!(scope.kind, ScopeKind::Class(_)) { return None; @@ -59,10 +59,7 @@ pub(crate) fn dunder_function_name( if matches!(scope.kind, ScopeKind::Module) && (name == "__getattr__" || name == "__dir__") { return None; } - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if ignore_names.matches(name) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/error_suffix_on_exception_name.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/error_suffix_on_exception_name.rs index 74bb9de5311082..93cd8d0ab6eba3 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/error_suffix_on_exception_name.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/error_suffix_on_exception_name.rs @@ -4,7 +4,7 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::identifier::Identifier; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for custom exception definitions that omit the `Error` suffix. @@ -47,7 +47,7 @@ pub(crate) fn error_suffix_on_exception_name( class_def: &Stmt, arguments: Option<&Arguments>, name: &str, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { if name.ends_with("Error") { return None; @@ -65,10 +65,7 @@ pub(crate) fn error_suffix_on_exception_name( return None; } - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if ignore_names.matches(name) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_argument_name.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_argument_name.rs index 04ce6dab2abcf8..dab549b526eeb5 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_argument_name.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_argument_name.rs @@ -5,7 +5,7 @@ use ruff_macros::{derive_message_formats, violation}; use ruff_python_stdlib::str; use ruff_text_size::Ranged; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for argument names that do not follow the `snake_case` convention. @@ -52,12 +52,9 @@ impl Violation for InvalidArgumentName { pub(crate) fn invalid_argument_name( name: &str, parameter: &Parameter, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if ignore_names.matches(name) { return None; } if !str::is_lowercase(name) { diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_class_name.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_class_name.rs index 005f04305cf28f..f72c99d22abfa5 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_class_name.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_class_name.rs @@ -4,7 +4,7 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::identifier::Identifier; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for class names that do not follow the `CamelCase` convention. @@ -52,12 +52,9 @@ impl Violation for InvalidClassName { pub(crate) fn invalid_class_name( class_def: &Stmt, name: &str, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if ignore_names.matches(name) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_first_argument_name_for_class_method.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_first_argument_name_for_class_method.rs index 3f362dc0fd9d6c..ce6e75ea3c0f37 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_first_argument_name_for_class_method.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_first_argument_name_for_class_method.rs @@ -91,13 +91,7 @@ pub(crate) fn invalid_first_argument_name_for_class_method( .or_else(|| parameters.args.first()) { if ¶meter.name != "cls" { - if checker - .settings - .pep8_naming - .ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if checker.settings.pep8_naming.ignore_names.matches(name) { return None; } return Some(Diagnostic::new( diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_first_argument_name_for_method.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_first_argument_name_for_method.rs index c3c6322f1d4f35..1407ef08427903 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_first_argument_name_for_method.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_first_argument_name_for_method.rs @@ -86,13 +86,7 @@ pub(crate) fn invalid_first_argument_name_for_method( if &arg.parameter.name == "self" { return None; } - if checker - .settings - .pep8_naming - .ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if checker.settings.pep8_naming.ignore_names.matches(name) { return None; } Some(Diagnostic::new( diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_function_name.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_function_name.rs index daac30bcd2141f..9439aa5a59880a 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_function_name.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_function_name.rs @@ -7,7 +7,7 @@ use ruff_python_semantic::analyze::visibility; use ruff_python_semantic::SemanticModel; use ruff_python_stdlib::str; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for functions names that do not follow the `snake_case` naming @@ -60,14 +60,11 @@ pub(crate) fn invalid_function_name( stmt: &Stmt, name: &str, decorator_list: &[Decorator], - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, semantic: &SemanticModel, ) -> Option { // Ignore any explicitly-ignored function names. - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if ignore_names.matches(name) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_module_name.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_module_name.rs index 4d64c0c34d96f6..f4c85ebad2024e 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_module_name.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/invalid_module_name.rs @@ -6,7 +6,7 @@ use ruff_macros::{derive_message_formats, violation}; use ruff_python_stdlib::identifiers::{is_migration_name, is_module_name}; use ruff_text_size::TextRange; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for module names that do not follow the `snake_case` naming @@ -50,7 +50,7 @@ impl Violation for InvalidModuleName { pub(crate) fn invalid_module_name( path: &Path, package: Option<&Path>, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { if !path .extension() @@ -66,10 +66,7 @@ pub(crate) fn invalid_module_name( path.file_stem().unwrap().to_string_lossy() }; - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(&module_name)) - { + if ignore_names.matches(&module_name) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/lowercase_imported_as_non_lowercase.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/lowercase_imported_as_non_lowercase.rs index 9c0491176c93d3..29e5f51f403895 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/lowercase_imported_as_non_lowercase.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/lowercase_imported_as_non_lowercase.rs @@ -1,11 +1,10 @@ -use ruff_python_ast::{Alias, Stmt}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{Alias, Stmt}; use ruff_python_stdlib::str; use ruff_text_size::Ranged; -use crate::settings::types::IdentifierPattern; +use crate::rules::pep8_naming::settings::IgnoreNames; /// ## What it does /// Checks for lowercase imports that are aliased to non-lowercase names. @@ -50,12 +49,9 @@ pub(crate) fn lowercase_imported_as_non_lowercase( asname: &str, alias: &Alias, stmt: &Stmt, - ignore_names: &[IdentifierPattern], + ignore_names: &IgnoreNames, ) -> Option { - if ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(asname)) - { + if ignore_names.matches(asname) { return None; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/mixed_case_variable_in_class_scope.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/mixed_case_variable_in_class_scope.rs index 43269ecd91ae23..7a9ca8d9e1052d 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/mixed_case_variable_in_class_scope.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/mixed_case_variable_in_class_scope.rs @@ -57,13 +57,7 @@ pub(crate) fn mixed_case_variable_in_class_scope( name: &str, arguments: Option<&Arguments>, ) { - if checker - .settings - .pep8_naming - .ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if checker.settings.pep8_naming.ignore_names.matches(name) { return; } if !helpers::is_mixed_case(name) { diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/mixed_case_variable_in_global_scope.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/mixed_case_variable_in_global_scope.rs index b08aeb2a79dab9..d59adc064700fc 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/mixed_case_variable_in_global_scope.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/mixed_case_variable_in_global_scope.rs @@ -62,13 +62,7 @@ impl Violation for MixedCaseVariableInGlobalScope { /// N816 pub(crate) fn mixed_case_variable_in_global_scope(checker: &mut Checker, expr: &Expr, name: &str) { - if checker - .settings - .pep8_naming - .ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if checker.settings.pep8_naming.ignore_names.matches(name) { return; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/rules/non_lowercase_variable_in_function.rs b/crates/ruff_linter/src/rules/pep8_naming/rules/non_lowercase_variable_in_function.rs index 7671b0b3ef59bb..5e9ebf10b3e8cb 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/rules/non_lowercase_variable_in_function.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/rules/non_lowercase_variable_in_function.rs @@ -67,13 +67,7 @@ pub(crate) fn non_lowercase_variable_in_function(checker: &mut Checker, expr: &E } // Ignore explicitly-allowed names. - if checker - .settings - .pep8_naming - .ignore_names - .iter() - .any(|ignore_name| ignore_name.matches(name)) - { + if checker.settings.pep8_naming.ignore_names.matches(name) { return; } diff --git a/crates/ruff_linter/src/rules/pep8_naming/settings.rs b/crates/ruff_linter/src/rules/pep8_naming/settings.rs index 1a64557a6d2ad5..974a87f6d97b18 100644 --- a/crates/ruff_linter/src/rules/pep8_naming/settings.rs +++ b/crates/ruff_linter/src/rules/pep8_naming/settings.rs @@ -4,42 +4,22 @@ use std::error::Error; use std::fmt; use std::fmt::Formatter; -use crate::display_settings; use ruff_macros::CacheKey; +use crate::display_settings; use crate::settings::types::IdentifierPattern; #[derive(Debug, CacheKey)] pub struct Settings { - pub ignore_names: Vec, + pub ignore_names: IgnoreNames, pub classmethod_decorators: Vec, pub staticmethod_decorators: Vec, } -pub fn default_ignore_names() -> Vec { - vec![ - "setUp".to_string(), - "tearDown".to_string(), - "setUpClass".to_string(), - "tearDownClass".to_string(), - "setUpModule".to_string(), - "tearDownModule".to_string(), - "asyncSetUp".to_string(), - "asyncTearDown".to_string(), - "setUpTestData".to_string(), - "failureException".to_string(), - "longMessage".to_string(), - "maxDiff".to_string(), - ] -} - impl Default for Settings { fn default() -> Self { Self { - ignore_names: default_ignore_names() - .into_iter() - .map(|name| IdentifierPattern::new(&name).unwrap()) - .collect(), + ignore_names: IgnoreNames::Default, classmethod_decorators: Vec::new(), staticmethod_decorators: Vec::new(), } @@ -52,7 +32,7 @@ impl fmt::Display for Settings { formatter = f, namespace = "linter.pep8_naming", fields = [ - self.ignore_names | array, + // self.ignore_names | array, self.classmethod_decorators | array, self.staticmethod_decorators | array ] @@ -84,3 +64,86 @@ impl Error for SettingsError { } } } + +#[derive(Debug, CacheKey)] +pub enum IgnoreNames { + Default, + UserProvided(Vec), +} + +impl IgnoreNames { + pub fn from_options( + ignore_names: Option>, + extend_ignore_names: Option>, + ) -> Result { + if ignore_names.is_none() && extend_ignore_names.as_ref().map_or(true, Vec::is_empty) { + Ok(IgnoreNames::Default) + } else { + let mut patterns: Vec = vec![]; + + if let Some(names) = ignore_names { + for name in names { + patterns.push( + IdentifierPattern::new(&name).map_err(SettingsError::InvalidIgnoreName)?, + ); + } + } else { + patterns.extend(IgnoreNames::Default.into_vec()); + } + + if let Some(names) = extend_ignore_names { + for name in names { + patterns.push( + IdentifierPattern::new(&name).map_err(SettingsError::InvalidIgnoreName)?, + ); + } + } + + Ok(IgnoreNames::UserProvided(patterns)) + } + } + + /// Convert the [`IgnoreNames`] into a vector of [`IdentifierPattern`]s. + pub fn into_vec(self) -> Vec { + match self { + IgnoreNames::Default => vec![ + IdentifierPattern::new("setUp").unwrap(), + IdentifierPattern::new("tearDown").unwrap(), + IdentifierPattern::new("setUpClass").unwrap(), + IdentifierPattern::new("tearDownClass").unwrap(), + IdentifierPattern::new("setUpModule").unwrap(), + IdentifierPattern::new("tearDownModule").unwrap(), + IdentifierPattern::new("asyncSetUp").unwrap(), + IdentifierPattern::new("asyncTearDown").unwrap(), + IdentifierPattern::new("setUpTestData").unwrap(), + IdentifierPattern::new("failureException").unwrap(), + IdentifierPattern::new("longMessage").unwrap(), + IdentifierPattern::new("maxDiff").unwrap(), + ], + IgnoreNames::UserProvided(patterns) => patterns, + } + } + + pub fn matches(&self, name: &str) -> bool { + match self { + IgnoreNames::Default => matches!( + name, + "setUp" + | "tearDown" + | "setUpClass" + | "tearDownClass" + | "setUpModule" + | "tearDownModule" + | "asyncSetUp" + | "asyncTearDown" + | "setUpTestData" + | "failureException" + | "longMessage" + | "maxDiff" + ), + IgnoreNames::UserProvided(patterns) => { + patterns.iter().any(|pattern| pattern.matches(name)) + } + } + } +} diff --git a/crates/ruff_workspace/src/options.rs b/crates/ruff_workspace/src/options.rs index 03a2d585248a69..734b5434148e75 100644 --- a/crates/ruff_workspace/src/options.rs +++ b/crates/ruff_workspace/src/options.rs @@ -15,6 +15,7 @@ use ruff_linter::rules::flake8_quotes::settings::Quote; use ruff_linter::rules::flake8_tidy_imports::settings::{ApiBan, Strictness}; use ruff_linter::rules::isort::settings::RelativeImportsOrder; use ruff_linter::rules::isort::{ImportSection, ImportType}; +use ruff_linter::rules::pep8_naming::settings::IgnoreNames; use ruff_linter::rules::pydocstyle::settings::Convention; use ruff_linter::rules::pylint::settings::ConstantType; use ruff_linter::rules::{ @@ -2511,16 +2512,7 @@ impl Pep8NamingOptions { self, ) -> Result { Ok(pep8_naming::settings::Settings { - ignore_names: self - .ignore_names - .unwrap_or_else(pep8_naming::settings::default_ignore_names) - .into_iter() - .chain(self.extend_ignore_names.unwrap_or_default()) - .map(|name| { - IdentifierPattern::new(&name) - .map_err(pep8_naming::settings::SettingsError::InvalidIgnoreName) - }) - .collect::, pep8_naming::settings::SettingsError>>()?, + ignore_names: IgnoreNames::from_options(self.ignore_names, self.extend_ignore_names)?, classmethod_decorators: self.classmethod_decorators.unwrap_or_default(), staticmethod_decorators: self.staticmethod_decorators.unwrap_or_default(), })