[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):
super(DataClass, self).f() # OK
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;
};
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;
}

View file

@ -1,6 +1,5 @@
---
source: crates/ruff_linter/src/rules/pyupgrade/mod.rs
snapshot_kind: text
---
UP008.py:17:23: UP008 [*] Use `super()` instead of `super(__class__, self)`
|
@ -126,4 +125,20 @@ UP008.py:74:14: UP008 [*] Use `super()` instead of `super(__class__, self)`
74 |+ super().f() # Error
75 75 | super().f() # OK
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()