Index: third_party/logilab/astng/raw_building.py |
diff --git a/third_party/logilab/astroid/raw_building.py b/third_party/logilab/astng/raw_building.py |
similarity index 76% |
rename from third_party/logilab/astroid/raw_building.py |
rename to third_party/logilab/astng/raw_building.py |
index e245f912b913692ef49b4ed442bf8ae8f965159f..395c26ec8e23e7eb5ff314e5f98f38294335abb0 100644 |
--- a/third_party/logilab/astroid/raw_building.py |
+++ b/third_party/logilab/astng/raw_building.py |
@@ -1,21 +1,23 @@ |
-# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
+# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
+# copyright 2003-2010 Sylvain Thenault, all rights reserved. |
+# contact mailto:thenault@gmail.com |
# |
-# This file is part of astroid. |
+# This file is part of logilab-astng. |
# |
-# astroid is free software: you can redistribute it and/or modify it |
+# logilab-astng is free software: you can redistribute it and/or modify it |
# under the terms of the GNU Lesser General Public License as published by the |
# Free Software Foundation, either version 2.1 of the License, or (at your |
# option) any later version. |
# |
-# astroid is distributed in the hope that it will be useful, but |
+# logilab-astng is distributed in the hope that it will be useful, but |
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License |
# for more details. |
# |
# You should have received a copy of the GNU Lesser General Public License along |
-# with astroid. If not, see <http://www.gnu.org/licenses/>. |
-"""this module contains a set of functions to create astroid trees from scratch |
+# with logilab-astng. If not, see <http://www.gnu.org/licenses/>. |
+"""this module contains a set of functions to create astng trees from scratch |
(build_* functions) or from living object (object_build_* functions) |
""" |
@@ -24,25 +26,18 @@ __docformat__ = "restructuredtext en" |
import sys |
from os.path import abspath |
from inspect import (getargspec, isdatadescriptor, isfunction, ismethod, |
- ismethoddescriptor, isclass, isbuiltin, ismodule) |
+ ismethoddescriptor, isclass, isbuiltin) |
-from astroid.node_classes import CONST_CLS |
-from astroid.nodes import (Module, Class, Const, const_factory, From, |
- Function, EmptyNode, Name, Arguments) |
-from astroid.bases import BUILTINS, Generator |
-from astroid.manager import AstroidManager |
-MANAGER = AstroidManager() |
+from logilab.astng import BUILTINS_MODULE |
+from logilab.astng.node_classes import CONST_CLS |
+from logilab.astng.nodes import (Module, Class, Const, const_factory, From, |
+ Function, EmptyNode, Name, Arguments, Dict, List, Set, Tuple) |
+from logilab.astng.bases import Generator |
+from logilab.astng.manager import ASTNGManager |
+MANAGER = ASTNGManager() |
_CONSTANTS = tuple(CONST_CLS) # the keys of CONST_CLS eg python builtin types |
-def _io_discrepancy(member): |
- # _io module names itself `io`: http://bugs.python.org/issue18602 |
- member_self = getattr(member, '__self__', None) |
- return (member_self and |
- ismodule(member_self) and |
- member_self.__name__ == '_io' and |
- member.__module__ == 'io') |
- |
def _attach_local_node(parent, node, name): |
node.name = name # needed by add_local_node |
parent.add_local_node(node) |
@@ -75,14 +70,14 @@ def attach_import_node(node, modname, membername): |
def build_module(name, doc=None): |
- """create and initialize a astroid Module node""" |
+ """create and initialize a astng Module node""" |
node = Module(name, doc, pure_python=False) |
node.package = False |
node.parent = None |
return node |
def build_class(name, basenames=(), doc=None): |
- """create and initialize a astroid Class node""" |
+ """create and initialize a astng Class node""" |
node = Class(name, doc) |
for base in basenames: |
basenode = Name() |
@@ -92,7 +87,7 @@ def build_class(name, basenames=(), doc=None): |
return node |
def build_function(name, args=None, defaults=None, flag=0, doc=None): |
- """create and initialize a astroid Function node""" |
+ """create and initialize a astng Function node""" |
args, defaults = args or [], defaults or [] |
# first argument is now a list of decorators |
func = Function(name, doc) |
@@ -115,7 +110,7 @@ def build_function(name, args=None, defaults=None, flag=0, doc=None): |
def build_from_import(fromname, names): |
- """create and initialize an astroid From import statement""" |
+ """create and initialize an astng From import statement""" |
return From(fromname, [(name, None) for name in names]) |
def register_arguments(func, args=None): |
@@ -137,13 +132,13 @@ def register_arguments(func, args=None): |
register_arguments(func, arg.elts) |
def object_build_class(node, member, localname): |
- """create astroid for a living class object""" |
+ """create astng for a living class object""" |
basenames = [base.__name__ for base in member.__bases__] |
return _base_class_object_build(node, member, basenames, |
localname=localname) |
def object_build_function(node, member, localname): |
- """create astroid for a living function object""" |
+ """create astng for a living function object""" |
args, varargs, varkw, defaults = getargspec(member) |
if varargs is not None: |
args.append(varargs) |
@@ -154,11 +149,11 @@ def object_build_function(node, member, localname): |
node.add_local_node(func, localname) |
def object_build_datadescriptor(node, member, name): |
- """create astroid for a living data descriptor object""" |
+ """create astng for a living data descriptor object""" |
return _base_class_object_build(node, member, [], name) |
def object_build_methoddescriptor(node, member, localname): |
- """create astroid for a living method descriptor object""" |
+ """create astng for a living method descriptor object""" |
# FIXME get arguments ? |
func = build_function(getattr(member, '__name__', None) or localname, |
doc=member.__doc__) |
@@ -168,7 +163,7 @@ def object_build_methoddescriptor(node, member, localname): |
node.add_local_node(func, localname) |
def _base_class_object_build(node, member, basenames, name=None, localname=None): |
- """create astroid for a living class object, with a given set of base names |
+ """create astng for a living class object, with a given set of base names |
(e.g. ancestors) |
""" |
klass = build_class(name or getattr(member, '__name__', None) or localname, |
@@ -205,28 +200,23 @@ class InspectBuilder(object): |
Function and Class nodes and some others as guessed. |
""" |
- # astroid from living objects ############################################### |
+ # astng from living objects ############################################### |
def __init__(self): |
self._done = {} |
self._module = None |
def inspect_build(self, module, modname=None, path=None): |
- """build astroid from a living module (i.e. using inspect) |
+ """build astng from a living module (i.e. using inspect) |
this is used when there is no python source code available (either |
because it's a built-in module or because the .py is not available) |
""" |
self._module = module |
if modname is None: |
modname = module.__name__ |
- try: |
- node = build_module(modname, module.__doc__) |
- except AttributeError: |
- # in jython, java modules have no __doc__ (see #109562) |
- node = build_module(modname) |
+ node = build_module(modname, module.__doc__) |
node.file = node.path = path and abspath(path) or path |
- node.name = modname |
- MANAGER.cache_module(node) |
+ MANAGER.astng_cache[modname] = node |
node.package = hasattr(module, '__path__') |
self._done = {} |
self.object_build(node, module) |
@@ -250,17 +240,12 @@ class InspectBuilder(object): |
member = member.im_func |
if isfunction(member): |
# verify this is not an imported function |
- filename = getattr(member.func_code, 'co_filename', None) |
- if filename is None: |
- assert isinstance(member, object) |
- object_build_methoddescriptor(node, member, name) |
- elif filename != getattr(self._module, '__file__', None): |
+ if member.func_code.co_filename != getattr(self._module, '__file__', None): |
attach_dummy_node(node, name, member) |
- else: |
- object_build_function(node, member, name) |
+ continue |
+ object_build_function(node, member, name) |
elif isbuiltin(member): |
- if (not _io_discrepancy(member) and |
- self.imported_member(node, member, name)): |
+ if self.imported_member(node, member, name): |
#if obj is object: |
# print 'skippp', obj, name, member |
continue |
@@ -284,7 +269,7 @@ class InspectBuilder(object): |
elif isdatadescriptor(member): |
assert isinstance(member, object) |
object_build_datadescriptor(node, member, name) |
- elif type(member) in _CONSTANTS: |
+ elif isinstance(member, _CONSTANTS): |
attach_const_node(node, name, member) |
else: |
# create an empty node so that the name is actually defined |
@@ -299,7 +284,7 @@ class InspectBuilder(object): |
modname = getattr(member, '__module__', None) |
except: |
# XXX use logging |
- print 'unexpected error while building astroid from living object' |
+ print 'unexpected error while building astng from living object' |
import traceback |
traceback.print_exc() |
modname = None |
@@ -308,7 +293,7 @@ class InspectBuilder(object): |
# Python 2.5.1 (r251:54863, Sep 1 2010, 22:03:14) |
# >>> print object.__new__.__module__ |
# None |
- modname = BUILTINS |
+ modname = BUILTINS_MODULE |
else: |
attach_dummy_node(node, name, member) |
return True |
@@ -325,28 +310,28 @@ class InspectBuilder(object): |
return False |
-### astroid bootstrapping ###################################################### |
-Astroid_BUILDER = InspectBuilder() |
+### astng boot strapping ################################################### ### |
_CONST_PROXY = {} |
-def astroid_bootstrapping(): |
- """astroid boot strapping the builtins module""" |
+def astng_boot_strapping(): |
+ """astng boot strapping the builtins module""" |
# this boot strapping is necessary since we need the Const nodes to |
# inspect_build builtins, and then we can proxy Const |
+ builder = InspectBuilder() |
from logilab.common.compat import builtins |
- astroid_builtin = Astroid_BUILDER.inspect_build(builtins) |
+ astng_builtin = builder.inspect_build(builtins) |
for cls, node_cls in CONST_CLS.items(): |
if cls is type(None): |
proxy = build_class('NoneType') |
- proxy.parent = astroid_builtin |
+ proxy.parent = astng_builtin |
else: |
- proxy = astroid_builtin.getattr(cls.__name__)[0] |
+ proxy = astng_builtin.getattr(cls.__name__)[0] # XXX |
if cls in (dict, list, set, tuple): |
node_cls._proxied = proxy |
else: |
_CONST_PROXY[cls] = proxy |
-astroid_bootstrapping() |
+astng_boot_strapping() |
# TODO : find a nicer way to handle this situation; |
# However __proxied introduced an |
@@ -355,7 +340,6 @@ def _set_proxied(const): |
return _CONST_PROXY[const.value.__class__] |
Const._proxied = property(_set_proxied) |
-from types import GeneratorType |
-Generator._proxied = Class(GeneratorType.__name__, GeneratorType.__doc__) |
-Astroid_BUILDER.object_build(Generator._proxied, GeneratorType) |
+# FIXME : is it alright that Generator._proxied is not a astng node? |
+Generator._proxied = MANAGER.infer_astng_from_something(type(a for a in ())) |