summaryrefslogtreecommitdiff
path: root/pylint/checkers/typecheck.py
diff options
context:
space:
mode:
authorDmitry Pribysh <dmand@yandex.ru>2015-10-08 16:22:42 +0300
committerDmitry Pribysh <dmand@yandex.ru>2015-10-08 16:22:42 +0300
commitf9550ad341a5155f32f895d068c8bbcd29e07606 (patch)
treed9f0a07271ae7b2a7c8a862831710c6e0f14eed7 /pylint/checkers/typecheck.py
parent892108e5313120e0040cb1f260612030e9ed61d6 (diff)
downloadpylint-f9550ad341a5155f32f895d068c8bbcd29e07606.tar.gz
Handle more corner cases in iterable/mapping checker
Diffstat (limited to 'pylint/checkers/typecheck.py')
-rw-r--r--pylint/checkers/typecheck.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/pylint/checkers/typecheck.py b/pylint/checkers/typecheck.py
index d54c5d3..83d9742 100644
--- a/pylint/checkers/typecheck.py
+++ b/pylint/checkers/typecheck.py
@@ -90,7 +90,13 @@ def _is_comprehension(node):
return isinstance(node, comprehensions)
+def _is_class_def(node):
+ return isinstance(node, astroid.ClassDef)
+
+
def _is_iterable(value):
+ if _is_class_def(value):
+ return False
try:
value.getattr('__iter__')
return True
@@ -106,6 +112,8 @@ def _is_iterable(value):
def _is_iterator(value):
+ if _is_class_def(value):
+ return False
try:
value.getattr('__iter__')
if six.PY2:
@@ -118,6 +126,8 @@ def _is_iterator(value):
def _is_old_style_iterator(value):
+ if _is_class_def(value):
+ return False
try:
value.getattr('__getitem__')
value.getattr('__len__')
@@ -127,10 +137,12 @@ def _is_old_style_iterator(value):
def _is_mapping(value):
+ if _is_class_def(value):
+ return False
try:
value.getattr('__getitem__')
value.getattr('__iter__')
- value.getattr('__len__')
+ value.getattr('keys')
return True
except astroid.NotFoundError:
return False
@@ -873,7 +885,7 @@ class IterableChecker(BaseChecker):
def _check_iterable(self, node, root_node):
# for/set/dict-comprehensions can't be infered with astroid,
- # so we check for them before the inference
+ # so we check for them before checking infered value
if _is_comprehension(node):
return
infered = helpers.safe_infer(node)