[pyupgrade] Fix super(__class__, self) detection in UP008 (super-call-with-parameters) (#18478)

This commit is contained in:
chiri 2025-06-12 09:52:45 +03:00 committed by GitHub
parent ef4108af2a
commit dbb0d60caa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 31 additions and 3 deletions

View file

@ -79,3 +79,14 @@ class DataClass:
def normal(self): def normal(self):
super(DataClass, self).f() # OK super(DataClass, self).f() # OK
super().f() # OK (`TypeError` in practice) super().f() # OK (`TypeError` in practice)
# see: https://github.com/astral-sh/ruff/issues/18477
class A:
def foo(self):
pass
class B(A):
def bar(self):
super(__class__, self).foo()

View file

@ -121,7 +121,9 @@ pub(crate) fn super_call_with_parameters(checker: &Checker, call: &ast::ExprCall
return; return;
}; };
if !(first_arg_id == parent_name.as_str() && second_arg_id == parent_arg.name().as_str()) { if !((first_arg_id == "__class__" || first_arg_id == parent_name.as_str())
&& second_arg_id == parent_arg.name().as_str())
{
return; return;
} }

View file

@ -1,6 +1,5 @@
--- ---
source: crates/ruff_linter/src/rules/pyupgrade/mod.rs source: crates/ruff_linter/src/rules/pyupgrade/mod.rs
snapshot_kind: text
--- ---
UP008.py:17:23: UP008 [*] Use `super()` instead of `super(__class__, self)` UP008.py:17:23: UP008 [*] Use `super()` instead of `super(__class__, self)`
| |
@ -127,3 +126,19 @@ UP008.py:74:14: UP008 [*] Use `super()` instead of `super(__class__, self)`
75 75 | super().f() # OK 75 75 | super().f() # OK
76 76 | 76 76 |
77 77 | 77 77 |
UP008.py:92:14: UP008 [*] Use `super()` instead of `super(__class__, self)`
|
90 | class B(A):
91 | def bar(self):
92 | super(__class__, self).foo()
| ^^^^^^^^^^^^^^^^^ UP008
|
= help: Remove `__super__` parameters
Unsafe fix
89 89 |
90 90 | class B(A):
91 91 | def bar(self):
92 |- super(__class__, self).foo()
92 |+ super().foo()