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.py32
1 files changed, 8 insertions, 24 deletions
diff --git a/pylint/checkers/base.py b/pylint/checkers/base.py
index 12e4e17..12fc32a 100644
--- a/pylint/checkers/base.py
+++ b/pylint/checkers/base.py
@@ -1898,27 +1898,20 @@ class MultipleTypesChecker(BaseChecker):
}
def visit_classdef(self, _):
- self._class_assigns = {}
+ self._assigns.append({})
@check_messages('redefined-variable-type')
def leave_classdef(self, _):
- self._check_and_add_messages(self._class_assigns)
+ self._check_and_add_messages()
- def visit_functiondef(self, _):
- self._func_assigns = {}
-
- @check_messages('redefined-variable-type')
- def leave_functiondef(self, _):
- self._check_and_add_messages(self._func_assigns)
+ visit_functiondef = visit_classdef
+ leave_functiondef = leave_module = leave_classdef
def visit_module(self, _):
- self._module_assigns = {}
-
- @check_messages('redefined-variable-type')
- def leave_module(self, _):
- self._check_and_add_messages(self._module_assigns)
+ self._assigns = [{}]
- def _check_and_add_messages(self, assigns):
+ def _check_and_add_messages(self):
+ assigns = self._assigns.pop()
for name, args in assigns.iteritems():
if len(args) <= 1:
continue
@@ -1934,15 +1927,6 @@ class MultipleTypesChecker(BaseChecker):
break
def visit_assign(self, node):
- scope = node.scope()
- if isinstance(scope, astroid.FunctionDef):
- msgs = self._func_assigns
- elif isinstance(scope, astroid.Module):
- msgs = self._module_assigns
- elif isinstance(scope, astroid.ClassDef):
- msgs = self._class_assigns
- else:
- return
# we don't handle multiple assignment nor slice assignment
target = node.targets[0]
if isinstance(target, (astroid.Tuple, astroid.Subscript)):
@@ -1966,7 +1950,7 @@ class MultipleTypesChecker(BaseChecker):
except InferenceError:
return
if types:
- msgs.setdefault(target.as_string(), []).append((node, types.pop()))
+ self._assigns[-1].setdefault(target.as_string(), []).append((node, types.pop()))
def register(linter):