summaryrefslogtreecommitdiff
path: root/checkers/stdlib.py
diff options
context:
space:
mode:
authorJulien Cristau <julien.cristau@logilab.fr>2013-07-17 11:05:34 +0200
committerJulien Cristau <julien.cristau@logilab.fr>2013-07-17 11:05:34 +0200
commitacffb398544bbe29c13d59f259e3a737f9ade426 (patch)
tree6ca690449b458a1a7857ad4aeff0b1e9bc677ec9 /checkers/stdlib.py
parent49e5fb8d85e7c7d756f48d11986e373911db2fab (diff)
downloadpylint-git-acffb398544bbe29c13d59f259e3a737f9ade426.tar.gz
Fix checking open() modes on python3
open.__module__ is io, not __builtins__.
Diffstat (limited to 'checkers/stdlib.py')
-rw-r--r--checkers/stdlib.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/checkers/stdlib.py b/checkers/stdlib.py
index 364633b74..604ade8ac 100644
--- a/checkers/stdlib.py
+++ b/checkers/stdlib.py
@@ -16,6 +16,7 @@
"""Checkers for various standard library functions."""
import re
+import sys
import astroid
@@ -25,7 +26,11 @@ from pylint.checkers import utils
_VALID_OPEN_MODE_REGEX = r'^(r?U|[rwa]\+?b?)$'
-
+if sys.version_info >= (3, 0):
+ OPEN_MODULE = '_io'
+else:
+ OPEN_MODULE = '__builtins__'
+
class OpenModeChecker(BaseChecker):
__implements__ = (IAstroidChecker,)
name = 'open_mode'
@@ -40,9 +45,11 @@ class OpenModeChecker(BaseChecker):
@utils.check_messages('W1501')
def visit_callfunc(self, node):
"""Visit a CallFunc node."""
- if (hasattr(node, 'func') and utils.is_builtin_object(utils.safe_infer(node.func))):
- if getattr(node.func, 'name', None) in ('open', 'file'):
- self._check_open_mode(node)
+ if hasattr(node, 'func'):
+ infer = utils.safe_infer(node.func)
+ if infer and infer.root().name == OPEN_MODULE:
+ if getattr(node.func, 'name', None) in ('open', 'file'):
+ self._check_open_mode(node)
def _check_open_mode(self, node):
"""Check that the mode argument of an open or file call is valid."""