diff --git a/crates/ruff/src/rules/pep8_naming/rules/dunder_function_name.rs b/crates/ruff/src/rules/pep8_naming/rules/dunder_function_name.rs index 0009feeb762df..7089ed2d7dfe9 100644 --- a/crates/ruff/src/rules/pep8_naming/rules/dunder_function_name.rs +++ b/crates/ruff/src/rules/pep8_naming/rules/dunder_function_name.rs @@ -3,6 +3,7 @@ use ruff_python_ast::Stmt; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::identifier::Identifier; +use ruff_python_semantic::analyze::visibility; use ruff_python_semantic::{Scope, ScopeKind}; use crate::settings::types::IdentifierPattern; @@ -51,7 +52,7 @@ pub(crate) fn dunder_function_name( if matches!(scope.kind, ScopeKind::Class(_)) { return None; } - if !(name.starts_with("__") && name.ends_with("__")) { + if !visibility::is_magic(name) { return None; } // Allowed under PEP 562 (https://peps.python.org/pep-0562/). diff --git a/crates/ruff_python_semantic/src/analyze/visibility.rs b/crates/ruff_python_semantic/src/analyze/visibility.rs index 28dae7c0c61aa..da826db5a06b9 100644 --- a/crates/ruff_python_semantic/src/analyze/visibility.rs +++ b/crates/ruff_python_semantic/src/analyze/visibility.rs @@ -121,7 +121,7 @@ pub fn is_test(name: &str) -> bool { /// Returns `true` if a module name indicates public visibility. fn is_public_module(module_name: &str) -> bool { - !module_name.starts_with('_') || (module_name.starts_with("__") && module_name.ends_with("__")) + !module_name.starts_with('_') || is_magic(module_name) } /// Returns `true` if a module name indicates private visibility. @@ -201,7 +201,7 @@ pub(crate) fn method_visibility(function: &ast::StmtFunctionDef) -> Visibility { } // Is this a magic method? - if function.name.starts_with("__") && function.name.ends_with("__") { + if is_magic(&function.name) { return Visibility::Public; }