1
0
forked from VimPlug/jedi

fixes a bug with magic functions of functions

This commit is contained in:
David Halter
2012-11-30 16:52:22 +01:00
parent 11fd817be8
commit 447ae46b2f
2 changed files with 12 additions and 9 deletions

View File

@@ -452,9 +452,9 @@ class Builtin(object):
return self.builtin.parser.module
@property
def magic_function_names(self):
def magic_function_scope(self):
try:
return self._magic_function_names
return self._magic_function_scope
except AttributeError:
# depth = 1 because this is not a module
class Container(object):
@@ -463,11 +463,11 @@ class Builtin(object):
parser = parsing.PyFuzzyParser(source, None)
# needed for caching (because of weakref)
module = self.magic_func_module = parser.module
module.parent = lambda: self.scope
typ = evaluate.follow_path(iter(['FunctionType']), module, module)
names = typ.pop().get_defined_names()
self._magic_function_names = names
return names
self._magic_function_scope = s = typ.pop()
return s
Builtin = Builtin()

View File

@@ -456,7 +456,10 @@ class Function(use_metaclass(CachedMetaClass, parsing.Base)):
return self._decorated_func
def get_magic_method_names(self):
return builtin.Builtin.magic_function_names
return builtin.Builtin.magic_function_scope.get_defined_names()
def get_magic_method_scope(self):
return builtin.Builtin.magic_function_scope
def __getattr__(self, name):
return getattr(self.base_func, name)
@@ -1552,13 +1555,13 @@ def follow_path(path, scope, call_scope, position=None):
else:
# The function must not be decorated with something else.
if scope.isinstance(Function):
result = scope.get_magic_method_names()
scope = scope.get_magic_method_scope()
else:
# This is the typical lookup while chaining things.
if filter_private_variable(scope, call_scope, current):
return []
result = imports.strip_imports(get_scopes_for_name(scope, current,
position=position))
result = imports.strip_imports(get_scopes_for_name(scope, current,
position=position))
return follow_paths(path, set(result), call_scope, position=position)