Fix checking open() modes on python3

open.__module__ is io, not __builtins__.
This commit is contained in:
Julien Cristau 2013-07-17 11:05:34 +02:00
parent 49e5fb8d85
commit acffb39854

View File

@ -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."""