summaryrefslogtreecommitdiff
path: root/pylint/checkers
diff options
context:
space:
mode:
authorDmitry Pribysh <dmand@yandex.ru>2015-11-07 19:09:00 +0300
committerDmitry Pribysh <dmand@yandex.ru>2015-11-07 19:09:00 +0300
commit570d3399d05e180f7d8643b238d31f063c407321 (patch)
tree97360a45728f1be11b00fbfabaa3538565a76159 /pylint/checkers
parent60c8b26efc81e78e9612d3eee0fa13edd2f52edb (diff)
downloadpylint-570d3399d05e180f7d8643b238d31f063c407321.tar.gz
Reduce number of false positives emitted by non-iterator-returned checker
By disabling checker for cases when there're multiple possible values infered for node. This way we lose some of the inference power, but throw a lot less false positives. Fixes issue #695.
Diffstat (limited to 'pylint/checkers')
-rw-r--r--pylint/checkers/classes.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/pylint/checkers/classes.py b/pylint/checkers/classes.py
index 3d9144d..24b862f 100644
--- a/pylint/checkers/classes.py
+++ b/pylint/checkers/classes.py
@@ -1067,12 +1067,15 @@ class SpecialMethodsChecker(BaseChecker):
def _check_iter(self, node):
try:
- infered = node.infer_call_result(node)
+ infered_values = list(node.infer_call_result(node))
except astroid.InferenceError:
return
-
- if not all(map(self._is_iterator, infered)):
- self.add_message('non-iterator-returned', node=node)
+ # cases when there're multiple values infered
+ # are skipped to reduce the number of false positives
+ if len(infered_values) == 1:
+ infered = infered_values[0]
+ if not self._is_iterator(infered):
+ self.add_message('non-iterator-returned', node=node)
def _ancestors_to_call(klass_node, method='__init__'):