diff options
author | Matus Valo <matusvalo@gmail.com> | 2021-06-27 06:40:55 +0200 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-06-29 19:12:56 +0200 |
commit | 1e593ac1a24766a8ed4706ba48493edce76cf6e3 (patch) | |
tree | 1652f6dab5f116afc110e6ba4c3f0f65a2789880 | |
parent | 5ed8becef308ea1c910c92d981ef268dba2dc9ba (diff) | |
download | pylint-git-1e593ac1a24766a8ed4706ba48493edce76cf6e3.tar.gz |
Added support for deprecated method alias
-rw-r--r-- | pylint/checkers/deprecated.py | 14 | ||||
-rw-r--r-- | tests/checkers/unittest_deprecated.py | 25 |
2 files changed, 34 insertions, 5 deletions
diff --git a/pylint/checkers/deprecated.py b/pylint/checkers/deprecated.py index ce1563a3c..7f1089843 100644 --- a/pylint/checkers/deprecated.py +++ b/pylint/checkers/deprecated.py @@ -197,15 +197,19 @@ class DeprecatedMixin: # Not interested in other nodes. return - qname = inferred.qname() - if any(name in self.deprecated_methods() for name in (qname, func_name)): + if hasattr(inferred.parent, "qname") and inferred.parent.qname(): + # Handling the situation when deprecated function is + # alias to existing function. + qnames = {inferred.qname(), f"{inferred.parent.qname()}.{func_name}"} + else: + qnames = {inferred.qname(), func_name} + if any(name in self.deprecated_methods() for name in qnames): self.add_message("deprecated-method", node=node, args=(func_name,)) return num_of_args = len(node.args) kwargs = {kw.arg for kw in node.keywords} if node.keywords else {} - for position, arg_name in chain( - self.deprecated_arguments(func_name), self.deprecated_arguments(qname) - ): + deprecated_arguments = (self.deprecated_arguments(qn) for qn in qnames) + for position, arg_name in chain(*deprecated_arguments): if arg_name in kwargs: # function was called with deprecated argument as keyword argument self.add_message( diff --git a/tests/checkers/unittest_deprecated.py b/tests/checkers/unittest_deprecated.py index 2da2bce17..5a1ec1c2c 100644 --- a/tests/checkers/unittest_deprecated.py +++ b/tests/checkers/unittest_deprecated.py @@ -91,6 +91,31 @@ class TestDeprecatedChecker(CheckerTestCase): ): self.checker.visit_call(node) + def test_deprecated_method_alias(self): + # Tests detecting deprecated method defined as alias + # to existing method + node = astroid.extract_node( + """ + class Deprecated: + def _deprecated_method(): + pass + + deprecated_method = _deprecated_method + + d = Deprecated() + d.deprecated_method() + """ + ) + with self.assertAddsMessages( + Message( + msg_id="deprecated-method", + args=("deprecated_method",), + node=node, + confidence=UNDEFINED, + ) + ): + self.checker.visit_call(node) + def test_no_message(self): # Tests not raising error when no deprecated functions/methods are present. node = astroid.extract_node( |