summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatus Valo <matusvalo@gmail.com>2021-06-27 06:40:55 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2021-06-29 19:12:56 +0200
commit1e593ac1a24766a8ed4706ba48493edce76cf6e3 (patch)
tree1652f6dab5f116afc110e6ba4c3f0f65a2789880
parent5ed8becef308ea1c910c92d981ef268dba2dc9ba (diff)
downloadpylint-git-1e593ac1a24766a8ed4706ba48493edce76cf6e3.tar.gz
Added support for deprecated method alias
-rw-r--r--pylint/checkers/deprecated.py14
-rw-r--r--tests/checkers/unittest_deprecated.py25
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(