diff options
author | Nick Pesce <npesce@terpmail.umd.edu> | 2021-10-19 12:35:30 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-19 18:35:30 +0200 |
commit | 80205dc813e17fc416e56bace982c971a10553fb (patch) | |
tree | a281ba61226fb0bc52749ca897992720958ba5c9 /tests | |
parent | 27cabbbb1f950c64c2f4a80bfcf005a694ae14a6 (diff) | |
download | pylint-git-80205dc813e17fc416e56bace982c971a10553fb.tar.gz |
Fix useless-super-delegation false positive when default keyword argument is a variable. (#5157)
Compare variable default args and simplify the logic of the checkers.
Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/functional/u/useless/useless_super_delegation.py | 19 | ||||
-rw-r--r-- | tests/functional/u/useless/useless_super_delegation.txt | 37 |
2 files changed, 38 insertions, 18 deletions
diff --git a/tests/functional/u/useless/useless_super_delegation.py b/tests/functional/u/useless/useless_super_delegation.py index 002c7eb03..2e0384040 100644 --- a/tests/functional/u/useless/useless_super_delegation.py +++ b/tests/functional/u/useless/useless_super_delegation.py @@ -3,6 +3,7 @@ # pylint: disable=line-too-long, useless-object-inheritance, arguments-out-of-order # pylint: disable=super-with-arguments, dangerous-default-value +default_var = 1 def not_a_method(param, param2): return super(None, None).not_a_method(param, param2) @@ -52,12 +53,18 @@ class Base(SuperBase): def with_default_argument_dict(self, first, default_arg={}): pass + def with_default_argument_var(self, first, default_arg=default_var): + pass + def with_default_arg_ter(self, first, default_arg="has_been_changed"): super().with_default_arg_ter(first, default_arg) def with_default_arg_quad(self, first, default_arg="has_been_changed"): super().with_default_arg_quad(first, default_arg) + def with_default_unhandled(self, first, default_arg=lambda: True): + super().with_default_arg_quad(first, default_arg) + class NotUselessSuper(Base): def multiple_statements(self): @@ -167,6 +174,11 @@ class NotUselessSuper(Base): # Not useless because the default_arg is different from the one in the base class super(NotUselessSuper, self).with_default_argument_dict(first, default_arg) + default_var = 2 + def with_default_argument_var(self, first, default_arg=default_var): + # Not useless because the default_arg refers to a different variable from the one in the base class + super(NotUselessSuper, self).with_default_argument_var(first, default_arg) + def with_default_argument_bis(self, first, default_arg="default"): # Although the default_arg is the same as in the base class, the call signature # differs. Thus it is not useless. @@ -192,6 +204,10 @@ class NotUselessSuper(Base): # call is different from the signature super(NotUselessSuper, self).with_default_arg_quad(first, default_arg + "_and_modified") + def with_default_unhandled(self, first, default_arg=lambda: True): + # Not useless because the default value type is not explictely handled (Lambda), so assume they are different + super(NotUselessSuper, self).with_default_unhandled(first, default_arg) + class UselessSuper(Base): @@ -236,6 +252,9 @@ class UselessSuper(Base): def with_default_argument_dict(self, first, default_arg={}): # [useless-super-delegation] super(UselessSuper, self).with_default_argument_dict(first, default_arg) + def with_default_argument_var(self, first, default_arg=default_var): # [useless-super-delegation] + super(UselessSuper, self).with_default_argument_var(first, default_arg) + def __init__(self): # [useless-super-delegation] super(UselessSuper, self).__init__() diff --git a/tests/functional/u/useless/useless_super_delegation.txt b/tests/functional/u/useless/useless_super_delegation.txt index d2dae5603..0d4b0a1fa 100644 --- a/tests/functional/u/useless/useless_super_delegation.txt +++ b/tests/functional/u/useless/useless_super_delegation.txt @@ -1,18 +1,19 @@ -useless-super-delegation:198:4:UselessSuper.equivalent_params:Useless super delegation in method 'equivalent_params' -useless-super-delegation:201:4:UselessSuper.equivalent_params_1:Useless super delegation in method 'equivalent_params_1' -useless-super-delegation:204:4:UselessSuper.equivalent_params_2:Useless super delegation in method 'equivalent_params_2' -useless-super-delegation:207:4:UselessSuper.equivalent_params_3:Useless super delegation in method 'equivalent_params_3' -useless-super-delegation:210:4:UselessSuper.equivalent_params_4:Useless super delegation in method 'equivalent_params_4' -useless-super-delegation:213:4:UselessSuper.equivalent_params_5:Useless super delegation in method 'equivalent_params_5' -useless-super-delegation:216:4:UselessSuper.equivalent_params_6:Useless super delegation in method 'equivalent_params_6' -useless-super-delegation:219:4:UselessSuper.with_default_argument:Useless super delegation in method 'with_default_argument' -useless-super-delegation:223:4:UselessSuper.without_default_argument:Useless super delegation in method 'without_default_argument' -useless-super-delegation:226:4:UselessSuper.with_default_argument_none:Useless super delegation in method 'with_default_argument_none' -useless-super-delegation:230:4:UselessSuper.with_default_argument_int:Useless super delegation in method 'with_default_argument_int' -useless-super-delegation:233:4:UselessSuper.with_default_argument_tuple:Useless super delegation in method 'with_default_argument_tuple' -useless-super-delegation:236:4:UselessSuper.with_default_argument_dict:Useless super delegation in method 'with_default_argument_dict' -useless-super-delegation:239:4:UselessSuper.__init__:Useless super delegation in method '__init__' -useless-super-delegation:242:4:UselessSuper.with_default_arg:Useless super delegation in method 'with_default_arg' -useless-super-delegation:245:4:UselessSuper.with_default_arg_bis:Useless super delegation in method 'with_default_arg_bis' -useless-super-delegation:248:4:UselessSuper.with_default_arg_ter:Useless super delegation in method 'with_default_arg_ter' -useless-super-delegation:251:4:UselessSuper.with_default_arg_quad:Useless super delegation in method 'with_default_arg_quad' +useless-super-delegation:214:4:UselessSuper.equivalent_params:Useless super delegation in method 'equivalent_params' +useless-super-delegation:217:4:UselessSuper.equivalent_params_1:Useless super delegation in method 'equivalent_params_1' +useless-super-delegation:220:4:UselessSuper.equivalent_params_2:Useless super delegation in method 'equivalent_params_2' +useless-super-delegation:223:4:UselessSuper.equivalent_params_3:Useless super delegation in method 'equivalent_params_3' +useless-super-delegation:226:4:UselessSuper.equivalent_params_4:Useless super delegation in method 'equivalent_params_4' +useless-super-delegation:229:4:UselessSuper.equivalent_params_5:Useless super delegation in method 'equivalent_params_5' +useless-super-delegation:232:4:UselessSuper.equivalent_params_6:Useless super delegation in method 'equivalent_params_6' +useless-super-delegation:235:4:UselessSuper.with_default_argument:Useless super delegation in method 'with_default_argument' +useless-super-delegation:239:4:UselessSuper.without_default_argument:Useless super delegation in method 'without_default_argument' +useless-super-delegation:242:4:UselessSuper.with_default_argument_none:Useless super delegation in method 'with_default_argument_none' +useless-super-delegation:246:4:UselessSuper.with_default_argument_int:Useless super delegation in method 'with_default_argument_int' +useless-super-delegation:249:4:UselessSuper.with_default_argument_tuple:Useless super delegation in method 'with_default_argument_tuple' +useless-super-delegation:252:4:UselessSuper.with_default_argument_dict:Useless super delegation in method 'with_default_argument_dict' +useless-super-delegation:255:4:UselessSuper.with_default_argument_var:Useless super delegation in method 'with_default_argument_var' +useless-super-delegation:258:4:UselessSuper.__init__:Useless super delegation in method '__init__' +useless-super-delegation:261:4:UselessSuper.with_default_arg:Useless super delegation in method 'with_default_arg' +useless-super-delegation:264:4:UselessSuper.with_default_arg_bis:Useless super delegation in method 'with_default_arg_bis' +useless-super-delegation:267:4:UselessSuper.with_default_arg_ter:Useless super delegation in method 'with_default_arg_ter' +useless-super-delegation:270:4:UselessSuper.with_default_arg_quad:Useless super delegation in method 'with_default_arg_quad' |