1
0
forked from VimPlug/jedi

ignore decorators if cannot be found (also get rid of DecoratorNotFound exception), fixes #272

This commit is contained in:
David Halter
2013-08-09 13:01:14 +04:30
parent a5fa0708ee
commit 22b11e0706
3 changed files with 19 additions and 26 deletions

View File

@@ -290,10 +290,7 @@ def find_name(scope, name_str, position=None, search_global=False,
elif isinstance(r, pr.Function): elif isinstance(r, pr.Function):
r = er.Function(r) r = er.Function(r)
if r.isinstance(er.Function): if r.isinstance(er.Function):
try: r = r.get_decorated_func()
r = r.get_decorated_func()
except er.DecoratorNotFound:
continue
res_new.append(r) res_new.append(r)
debug.dbg('sfn remove, new: %s, old: %s' % (res_new, result)) debug.dbg('sfn remove, new: %s, old: %s' % (res_new, result))
return res_new return res_new

View File

@@ -28,13 +28,6 @@ import builtin
import dynamic import dynamic
class DecoratorNotFound(LookupError):
"""
Decorators are sometimes not found, if that happens, that error is raised.
"""
pass
class Executable(pr.IsScope): class Executable(pr.IsScope):
""" """
An instance is also an executable - because __init__ is called An instance is also an executable - because __init__ is called
@@ -355,10 +348,13 @@ class Function(use_metaclass(cache.CachedMetaClass, pr.IsScope)):
def get_decorated_func(self, instance=None): def get_decorated_func(self, instance=None):
decorated_func = self._decorated_func(instance) decorated_func = self._decorated_func(instance)
if decorated_func is None:
raise DecoratorNotFound()
if decorated_func == self.base_func: if decorated_func == self.base_func:
return self return self
if decorated_func is None:
# If the decorator func is not found, just ignore the decorator
# function, because sometimes decorators are just really
# complicated.
return Function(self.base_func, True)
return decorated_func return decorated_func
def get_magic_method_names(self): def get_magic_method_names(self):

View File

@@ -115,17 +115,17 @@ MethodDecoratorAsClass().func_with_self(1)
# ----------------- # -----------------
# not found decorators # not found decorators (are just ignored)
# ----------------- # -----------------
@not_found_decorator @not_found_decorator
def just_a_func(): def just_a_func():
return 1 return 1
#? [] #? int()
just_a_func() just_a_func()
#? [] #? ['__closure__']
just_a_func. just_a_func.__closure__
class JustAClass: class JustAClass:
@@ -133,14 +133,14 @@ class JustAClass:
def a(self): def a(self):
return 1 return 1
#? [] #? ['__closure__']
JustAClass().a. JustAClass().a.__closure__
#? [] #? int()
JustAClass().a()
#? []
JustAClass.a.
#? []
JustAClass().a() JustAClass().a()
#? ['__closure__']
JustAClass.a.__closure__
#? int()
JustAClass.a()
# ----------------- # -----------------
# method decorators # method decorators
@@ -192,11 +192,11 @@ class MethodDecoratorDoesntExist(Base):
def a(self): def a(self):
#? #?
super().__init__() super().__init__()
#? #? str()
super().b() super().b()
#? int() #? int()
super().c() super().c()
#? #? float()
self.d() self.d()
@doesnt_exist @doesnt_exist