diff --git a/crates/ruff/resources/test/fixtures/flake8_self/SLF001.py b/crates/ruff/resources/test/fixtures/flake8_self/SLF001.py index d395016904..05351ca70d 100644 --- a/crates/ruff/resources/test/fixtures/flake8_self/SLF001.py +++ b/crates/ruff/resources/test/fixtures/flake8_self/SLF001.py @@ -38,13 +38,13 @@ class Foo(metaclass=BazMeta): return self.bar def public_func(self): - pass + super().public_func() def _private_func(self): - pass + super()._private_func() def __really_private_func(self, arg): - pass + super().__really_private_func(arg) foo = Foo() diff --git a/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs b/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs index cdc173560e..99c12c4974 100644 --- a/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs +++ b/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs @@ -21,15 +21,23 @@ impl Violation for PrivateMemberAccess { } } -const VALID_IDS: [&str; 3] = ["self", "cls", "mcs"]; - /// SLF001 pub fn private_member_access(checker: &mut Checker, expr: &Expr) { if let ExprKind::Attribute { value, attr, .. } = &expr.node { if !attr.ends_with("__") && (attr.starts_with('_') || attr.starts_with("__")) { - let call_path = collect_call_path(value); - if VALID_IDS.iter().any(|id| call_path.as_slice() == [*id]) { - return; + if let ExprKind::Call { func, .. } = &value.node { + let call_path = collect_call_path(func); + if call_path.as_slice() == ["super"] { + return; + } + } else { + let call_path = collect_call_path(value); + if call_path.as_slice() == ["self"] + || call_path.as_slice() == ["cls"] + || call_path.as_slice() == ["mcs"] + { + return; + } } checker.diagnostics.push(Diagnostic::new(