| Index: third_party/logilab/astroid/builder.py
|
| diff --git a/third_party/logilab/astroid/builder.py b/third_party/logilab/astroid/builder.py
|
| index 692016a3677f19f617f5c0eb5124279a1a50bfda..1fe7a36d42290f70fb31b0f5d28219fa71bb8fe1 100644
|
| --- a/third_party/logilab/astroid/builder.py
|
| +++ b/third_party/logilab/astroid/builder.py
|
| @@ -44,7 +44,7 @@ if sys.version_info >= (3, 0):
|
| def open_source_file(filename):
|
| with open(filename, 'rb') as byte_stream:
|
| encoding = detect_encoding(byte_stream.readline)[0]
|
| - stream = open(filename, 'rU', encoding=encoding)
|
| + stream = open(filename, 'r', newline=None, encoding=encoding)
|
| try:
|
| data = stream.read()
|
| except UnicodeError: # wrong encodingg
|
| @@ -115,23 +115,24 @@ class AstroidBuilder(InspectBuilder):
|
| path is expected to be a python source file
|
| """
|
| try:
|
| - _, encoding, data = open_source_file(path)
|
| - except IOError, exc:
|
| + stream, encoding, data = open_source_file(path)
|
| + except IOError as exc:
|
| msg = 'Unable to load file %r (%s)' % (path, exc)
|
| raise AstroidBuildingException(msg)
|
| - except SyntaxError, exc: # py3k encoding specification error
|
| + except SyntaxError as exc: # py3k encoding specification error
|
| raise AstroidBuildingException(exc)
|
| - except LookupError, exc: # unknown encoding
|
| + except LookupError as exc: # unknown encoding
|
| raise AstroidBuildingException(exc)
|
| - # get module name if necessary
|
| - if modname is None:
|
| - try:
|
| - modname = '.'.join(modpath_from_file(path))
|
| - except ImportError:
|
| - modname = splitext(basename(path))[0]
|
| - # build astroid representation
|
| - module = self._data_build(data, modname, path)
|
| - return self._post_build(module, encoding)
|
| + with stream:
|
| + # get module name if necessary
|
| + if modname is None:
|
| + try:
|
| + modname = '.'.join(modpath_from_file(path))
|
| + except ImportError:
|
| + modname = splitext(basename(path))[0]
|
| + # build astroid representation
|
| + module = self._data_build(data, modname, path)
|
| + return self._post_build(module, encoding)
|
|
|
| def string_build(self, data, modname='', path=None):
|
| """build astroid from source code string and return rebuilded astroid"""
|
| @@ -159,7 +160,10 @@ class AstroidBuilder(InspectBuilder):
|
| def _data_build(self, data, modname, path):
|
| """build tree node from data and add some informations"""
|
| # this method could be wrapped with a pickle/cache function
|
| - node = parse(data + '\n')
|
| + try:
|
| + node = parse(data + '\n')
|
| + except TypeError as exc:
|
| + raise AstroidBuildingException(exc)
|
| if path is not None:
|
| node_file = abspath(path)
|
| else:
|
| @@ -170,8 +174,7 @@ class AstroidBuilder(InspectBuilder):
|
| else:
|
| package = path and path.find('__init__.py') > -1 or False
|
| rebuilder = TreeRebuilder(self._manager)
|
| - module = rebuilder.visit_module(node, modname, package)
|
| - module.file = module.path = node_file
|
| + module = rebuilder.visit_module(node, modname, node_file, package)
|
| module._from_nodes = rebuilder._from_nodes
|
| module._delayed_assattr = rebuilder._delayed_assattr
|
| return module
|
|
|