diff options
author | Sylvain Thénault <sylvain.thenault@logilab.fr> | 2009-03-17 20:07:45 +0100 |
---|---|---|
committer | Sylvain Thénault <sylvain.thenault@logilab.fr> | 2009-03-17 20:07:45 +0100 |
commit | 4d60db050e3ddb99343328f0b4018c10f6176f6f (patch) | |
tree | 53aac3e0107fbee2fc23716285f148b8ff0c3055 | |
parent | 43cd0c615d7cfdcad19202a58ea99059ad4eb1c3 (diff) | |
download | astroid-git-4d60db050e3ddb99343328f0b4018c10f6176f6f.tar.gz |
fix lookup of module attributes accessible in module scope
--HG--
branch : _ast_compat
-rw-r--r-- | lookup.py | 11 | ||||
-rw-r--r-- | scoped_nodes.py | 2 |
2 files changed, 12 insertions, 1 deletions
@@ -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' |