From 3c8be8ee40babf9bcbaae53b9f2ec518c6d76ca7 Mon Sep 17 00:00:00 2001 From: Mark Byrne <31762852+mbyrnepr2@users.noreply.github.com> Date: Fri, 3 May 2024 21:07:31 +0200 Subject: [PATCH] Fix false negative for ``property-with-parameters`` (#9592) In the case of parameters which are ``positional-only``, ``keyword-only``, ``variadic positional`` or ``variadic keyword``. Set the confidence level to HIGH for the ``property-with-parameters`` check and regenerate the functional tests. Closes #9584 --- doc/whatsnew/fragments/9584.false_negative | 3 +++ pylint/checkers/classes/class_checker.py | 5 ++--- .../functional/p/property_with_parameters.py | 20 +++++++++++++++++-- .../functional/p/property_with_parameters.txt | 6 +++++- 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 doc/whatsnew/fragments/9584.false_negative diff --git a/doc/whatsnew/fragments/9584.false_negative b/doc/whatsnew/fragments/9584.false_negative new file mode 100644 index 0000000000..41459d6fcc --- /dev/null +++ b/doc/whatsnew/fragments/9584.false_negative @@ -0,0 +1,3 @@ +Fix false negative for ``property-with-parameters`` in the case of parameters which are ``positional-only``, ``keyword-only``, ``variadic positional`` or ``variadic keyword``. + +Closes #9584 diff --git a/pylint/checkers/classes/class_checker.py b/pylint/checkers/classes/class_checker.py index 996c59dcc2..d77465bcd3 100644 --- a/pylint/checkers/classes/class_checker.py +++ b/pylint/checkers/classes/class_checker.py @@ -1410,12 +1410,11 @@ def form_annotations(arguments: nodes.Arguments) -> list[str]: def _check_property_with_parameters(self, node: nodes.FunctionDef) -> None: if ( - node.args.args - and len(node.args.args) > 1 + len(node.args.arguments) > 1 and decorated_with_property(node) and not is_property_setter(node) ): - self.add_message("property-with-parameters", node=node) + self.add_message("property-with-parameters", node=node, confidence=HIGH) def _check_invalid_overridden_method( self, diff --git a/tests/functional/p/property_with_parameters.py b/tests/functional/p/property_with_parameters.py index b210bb5015..599d744b4c 100644 --- a/tests/functional/p/property_with_parameters.py +++ b/tests/functional/p/property_with_parameters.py @@ -4,8 +4,24 @@ class Cls: @property - def attribute(self, param, param1): # [property-with-parameters] - return param + param1 + def a(self, arg): # [property-with-parameters] + return arg + + @property + def b(self, arg, /): # [property-with-parameters] + return arg + + @property + def c(self, *, arg): # [property-with-parameters] + return arg + + @property + def d(self, *args): # [property-with-parameters] + return args + + @property + def e(self, **kwargs): # [property-with-parameters] + return kwargs class MyClassBase(metaclass=ABCMeta): diff --git a/tests/functional/p/property_with_parameters.txt b/tests/functional/p/property_with_parameters.txt index bc07bc6d19..5360e90c0f 100644 --- a/tests/functional/p/property_with_parameters.txt +++ b/tests/functional/p/property_with_parameters.txt @@ -1 +1,5 @@ -property-with-parameters:7:4:7:17:Cls.attribute:Cannot have defined parameters for properties:UNDEFINED +property-with-parameters:7:4:7:9:Cls.a:Cannot have defined parameters for properties:HIGH +property-with-parameters:11:4:11:9:Cls.b:Cannot have defined parameters for properties:HIGH +property-with-parameters:15:4:15:9:Cls.c:Cannot have defined parameters for properties:HIGH +property-with-parameters:19:4:19:9:Cls.d:Cannot have defined parameters for properties:HIGH +property-with-parameters:23:4:23:9:Cls.e:Cannot have defined parameters for properties:HIGH