diff options
author | Dmitry Pribysh <dmand@yandex.ru> | 2015-11-07 19:09:00 +0300 |
---|---|---|
committer | Dmitry Pribysh <dmand@yandex.ru> | 2015-11-07 19:09:00 +0300 |
commit | 570d3399d05e180f7d8643b238d31f063c407321 (patch) | |
tree | 97360a45728f1be11b00fbfabaa3538565a76159 /pylint/checkers | |
parent | 60c8b26efc81e78e9612d3eee0fa13edd2f52edb (diff) | |
download | pylint-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.py | 11 |
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__'): |