diff options
author | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2023-04-06 19:38:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-06 19:38:05 +0200 |
commit | 84d495968cebf368c69932f538ba8d7d2f0bdbd9 (patch) | |
tree | 88166a3be7dd5f0c554f7ceb8d935fc6a6dab78b /tests/functional/u | |
parent | de0147e92586be56cdee9711dd3d3a7a7e1c9ef2 (diff) | |
download | pylint-git-84d495968cebf368c69932f538ba8d7d2f0bdbd9.tar.gz |
Fix check unused arguments false positive bug (#8542) (#8545)
Problem: the special method `__new__` must match the arguments of the
`__init__` method even if `__new__` method does not use them. This
generate `unused-argument` for the `__new__` method.
Fix: the unused arguments check should not be done on the `__new__`
method if the `__init__` method is defined in the same class.
Update `unused-argument` test to include a check for the case of
`__init__` and `__new__` being defined in a class but `__new__` does not
use all of the argument. This is fine because `__new__` must have the
same argument of `__init__`.
Update with a second check in case of `__init__` being not defined in a
class. Then the unused arguments check must be done on `__new__`.
Fixes https://github.com/pylint-dev/pylint/issues/3670
(cherry picked from commit 156da64d0fb4c06e15c5b619b91ce550d594a770)
Co-authored-by: Théo Battrel <theo.util@protonmail.ch>
Diffstat (limited to 'tests/functional/u')
-rw-r--r-- | tests/functional/u/unused/unused_argument.py | 21 | ||||
-rw-r--r-- | tests/functional/u/unused/unused_argument.txt | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/tests/functional/u/unused/unused_argument.py b/tests/functional/u/unused/unused_argument.py index b46c1e4d7..69c37feef 100644 --- a/tests/functional/u/unused/unused_argument.py +++ b/tests/functional/u/unused/unused_argument.py @@ -107,3 +107,24 @@ class Descendant(Ancestor): def set_thing(self, thing, *, other=None): """Subclass does not raise unused-argument""" self.thing = thing + + +# Test that Class with both `__init__` and `__new__` don't check +# on `__new__` for unused arguments + +# pylint: disable=invalid-name + +class TestClassWithInitAndNew: + def __init__(self, argA, argB): + self.argA = argA + self.argB = argB + + def __new__(cls, argA, argB): + return object.__new__(cls) + +# Test that `__new__` method is checked for unused arguments +# when `__init__` is not in the Class + +class TestClassWithOnlyNew: + def __new__(cls, argA, argB): # [unused-argument, unused-argument] + return object.__new__(cls) diff --git a/tests/functional/u/unused/unused_argument.txt b/tests/functional/u/unused/unused_argument.txt index 19c439304..bca2700ac 100644 --- a/tests/functional/u/unused/unused_argument.txt +++ b/tests/functional/u/unused/unused_argument.txt @@ -7,3 +7,5 @@ unused-argument:73:0:None:None:AAAA.selected:Unused argument 'args':INFERENCE unused-argument:73:0:None:None:AAAA.selected:Unused argument 'kwargs':INFERENCE unused-argument:92:23:92:26:BBBB.__init__:Unused argument 'arg':INFERENCE unused-argument:103:34:103:39:Ancestor.set_thing:Unused argument 'other':INFERENCE +unused-argument:129:21:129:25:TestClassWithOnlyNew.__new__:Unused argument 'argA':INFERENCE +unused-argument:129:27:129:31:TestClassWithOnlyNew.__new__:Unused argument 'argB':INFERENCE |