summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain Thénault <sylvain.thenault@logilab.fr>2010-09-10 11:48:20 +0200
committerSylvain Thénault <sylvain.thenault@logilab.fr>2010-09-10 11:48:20 +0200
commit629bddb398245c0cc0c8f93b66e835ce7cc6b718 (patch)
tree9f1bfb3ce2c9fccee931063e26034f7c9d66c3dc
parent97a1dcea92a20cbf9f80069f81e73fe043d08516 (diff)
downloadastroid-git-629bddb398245c0cc0c8f93b66e835ce7cc6b718.tar.gz
fix astng building bug: we've to set module.package flag at the node creation time
otherwise we'll miss this information when infering relative import during the build process (this should fix for instance some problems with numpy) --HG-- branch : stable
-rw-r--r--_nodes_ast.py3
-rw-r--r--_nodes_compiler.py3
-rw-r--r--builder.py3
-rw-r--r--rebuilder.py4
4 files changed, 7 insertions, 6 deletions
diff --git a/_nodes_ast.py b/_nodes_ast.py
index ebe5263a..4b6767f0 100644
--- a/_nodes_ast.py
+++ b/_nodes_ast.py
@@ -508,9 +508,10 @@ class TreeRebuilder(RebuildVisitor):
newnode.set_line_info(newnode.last_child())
return newnode
- def visit_module(self, node, modname):
+ def visit_module(self, node, modname, package):
"""visit a Module node by returning a fresh instance of it"""
newnode = new.Module(modname, None)
+ newnode.package = package
_lineno_parent(node, newnode, parent=None)
_init_set_doc(node, newnode)
newnode.body = [self.visit(child, newnode) for child in node.body]
diff --git a/_nodes_compiler.py b/_nodes_compiler.py
index d504604e..506fbdc2 100644
--- a/_nodes_compiler.py
+++ b/_nodes_compiler.py
@@ -557,9 +557,10 @@ class TreeRebuilder(RebuildVisitor):
newnode.generators = [self.visit(child, newnode) for child in node.quals]
return newnode
- def visit_module(self, node, modname):
+ def visit_module(self, node, modname, package):
"""visit a Module node by returning a fresh instance of it"""
newnode = new.Module(modname, node.doc)
+ newnode.package = package
self._set_infos(node, newnode, None)
self._remove_nodes = [] # list of ';' Discard nodes to be removed
newnode.body = [self.visit(child, newnode) for child in node.node.nodes]
diff --git a/builder.py b/builder.py
index b0e5d18b..e5142617 100644
--- a/builder.py
+++ b/builder.py
@@ -155,8 +155,7 @@ class ASTNGBuilder:
package = True
else:
package = path and path.find('__init__.py') > -1 or False
- newnode = self.rebuilder.build(node, modname, node_file)
- newnode.package = package
+ newnode = self.rebuilder.build(node, modname, node_file, package)
return newnode
# astng from living objects ###############################################
diff --git a/rebuilder.py b/rebuilder.py
index 063aad7a..d902875e 100644
--- a/rebuilder.py
+++ b/rebuilder.py
@@ -94,14 +94,14 @@ class RebuildVisitor(object):
visit_method = getattr(self, visit_name)
return visit_method(node, parent)
- def build(self, node, modname, module_file):
+ def build(self, node, modname, module_file, package):
"""rebuild the tree starting with an Module node;
return an astng.Module node
"""
self._metaclass = ['']
self._global_names = []
self._from_nodes = []
- module = self.visit_module(node, modname)
+ module = self.visit_module(node, modname, package)
module.file = module.path = module_file
# init module cache here else we may get some infinite recursion
# errors while infering delayed assignments