summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain Thénault <sylvain.thenault@logilab.fr>2009-03-17 20:07:45 +0100
committerSylvain Thénault <sylvain.thenault@logilab.fr>2009-03-17 20:07:45 +0100
commit4d60db050e3ddb99343328f0b4018c10f6176f6f (patch)
tree53aac3e0107fbee2fc23716285f148b8ff0c3055
parent43cd0c615d7cfdcad19202a58ea99059ad4eb1c3 (diff)
downloadastroid-git-4d60db050e3ddb99343328f0b4018c10f6176f6f.tar.gz
fix lookup of module attributes accessible in module scope
--HG-- branch : _ast_compat
-rw-r--r--lookup.py11
-rw-r--r--scoped_nodes.py2
2 files changed, 12 insertions, 1 deletions
diff --git a/lookup.py b/lookup.py
index 1abb7289..294f080c 100644
--- a/lookup.py
+++ b/lookup.py
@@ -69,6 +69,15 @@ def scope_lookup(self, node, name, offset=0):
return pscope.scope_lookup(node, name)
return builtin_lookup(name)
+def module_scope_lookup(self, node, name, offset=0):
+ # module's __dict__ not accessible through name lookup
+ if name in nodes.Module.scope_attrs and not name in self.locals:
+ try:
+ return self, self.getattr(name)
+ except NotFoundError:
+ return self, ()
+ return scope_lookup(self, node, name, offset)
+
def class_scope_lookup(self, node, name, offset=0):
if node in self.bases:
frame = self.parent.frame()
@@ -230,6 +239,6 @@ for klass in (nodes.Name, nodes.AssName, nodes.DelName,
nodes.Class.scope_lookup = class_scope_lookup
nodes.Function.scope_lookup = function_scope_lookup
nodes.Lambda.scope_lookup = function_scope_lookup
-nodes.Module.scope_lookup = scope_lookup
+nodes.Module.scope_lookup = module_scope_lookup
nodes.GenExpr.scope_lookup = scope_lookup
diff --git a/scoped_nodes.py b/scoped_nodes.py
index 7a80e131..3a856992 100644
--- a/scoped_nodes.py
+++ b/scoped_nodes.py
@@ -195,6 +195,8 @@ class ModuleNG(object):
# as value
globals = None
+ scope_attrs = ('__name__', '__doc__', '__file__', '__path__')
+
def pytype(self):
return '__builtin__.module'