summaryrefslogtreecommitdiff
path: root/pylint/checkers/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'pylint/checkers/base.py')
-rw-r--r--pylint/checkers/base.py19
1 files changed, 7 insertions, 12 deletions
diff --git a/pylint/checkers/base.py b/pylint/checkers/base.py
index 68f6bd59d..4578fbc5b 100644
--- a/pylint/checkers/base.py
+++ b/pylint/checkers/base.py
@@ -238,8 +238,7 @@ def _redefines_import(node):
def in_loop(node):
"""return True if the node is inside a kind of for loop"""
- parent = node.parent
- while parent is not None:
+ for parent in node.node_ancestors():
if isinstance(
parent,
(
@@ -251,7 +250,6 @@ def in_loop(node):
),
):
return True
- parent = parent.parent
return False
@@ -847,23 +845,20 @@ class BasicErrorChecker(_BasicChecker):
def _check_in_loop(self, node, node_name):
"""check that a node is inside a for or while loop"""
- _node = node.parent
- while _node:
- if isinstance(_node, (nodes.For, nodes.While)):
- if node not in _node.orelse:
+ for parent in node.node_ancestors():
+ if isinstance(parent, (nodes.For, nodes.While)):
+ if node not in parent.orelse:
return
- if isinstance(_node, (nodes.ClassDef, nodes.FunctionDef)):
+ if isinstance(parent, (nodes.ClassDef, nodes.FunctionDef)):
break
if (
- isinstance(_node, nodes.TryFinally)
- and node in _node.finalbody
+ isinstance(parent, nodes.TryFinally)
+ and node in parent.finalbody
and isinstance(node, nodes.Continue)
):
self.add_message("continue-in-finally", node=node)
- _node = _node.parent
-
self.add_message("not-in-loop", node=node, args=node_name)
def _check_redefinition(self, redeftype, node):