mirror of
https://github.com/davidhalter/jedi.git
synced 2026-02-25 13:07:13 +08:00
fixes a bug with magic functions of functions
This commit is contained in:
@@ -452,9 +452,9 @@ class Builtin(object):
|
|||||||
return self.builtin.parser.module
|
return self.builtin.parser.module
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def magic_function_names(self):
|
def magic_function_scope(self):
|
||||||
try:
|
try:
|
||||||
return self._magic_function_names
|
return self._magic_function_scope
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# depth = 1 because this is not a module
|
# depth = 1 because this is not a module
|
||||||
class Container(object):
|
class Container(object):
|
||||||
@@ -463,11 +463,11 @@ class Builtin(object):
|
|||||||
parser = parsing.PyFuzzyParser(source, None)
|
parser = parsing.PyFuzzyParser(source, None)
|
||||||
# needed for caching (because of weakref)
|
# needed for caching (because of weakref)
|
||||||
module = self.magic_func_module = parser.module
|
module = self.magic_func_module = parser.module
|
||||||
|
module.parent = lambda: self.scope
|
||||||
typ = evaluate.follow_path(iter(['FunctionType']), module, module)
|
typ = evaluate.follow_path(iter(['FunctionType']), module, module)
|
||||||
|
|
||||||
names = typ.pop().get_defined_names()
|
self._magic_function_scope = s = typ.pop()
|
||||||
self._magic_function_names = names
|
return s
|
||||||
return names
|
|
||||||
|
|
||||||
|
|
||||||
Builtin = Builtin()
|
Builtin = Builtin()
|
||||||
|
|||||||
@@ -456,7 +456,10 @@ class Function(use_metaclass(CachedMetaClass, parsing.Base)):
|
|||||||
return self._decorated_func
|
return self._decorated_func
|
||||||
|
|
||||||
def get_magic_method_names(self):
|
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):
|
def __getattr__(self, name):
|
||||||
return getattr(self.base_func, name)
|
return getattr(self.base_func, name)
|
||||||
@@ -1552,13 +1555,13 @@ def follow_path(path, scope, call_scope, position=None):
|
|||||||
else:
|
else:
|
||||||
# The function must not be decorated with something else.
|
# The function must not be decorated with something else.
|
||||||
if scope.isinstance(Function):
|
if scope.isinstance(Function):
|
||||||
result = scope.get_magic_method_names()
|
scope = scope.get_magic_method_scope()
|
||||||
else:
|
else:
|
||||||
# This is the typical lookup while chaining things.
|
# This is the typical lookup while chaining things.
|
||||||
if filter_private_variable(scope, call_scope, current):
|
if filter_private_variable(scope, call_scope, current):
|
||||||
return []
|
return []
|
||||||
result = imports.strip_imports(get_scopes_for_name(scope, current,
|
result = imports.strip_imports(get_scopes_for_name(scope, current,
|
||||||
position=position))
|
position=position))
|
||||||
return follow_paths(path, set(result), call_scope, position=position)
|
return follow_paths(path, set(result), call_scope, position=position)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user