forked from VimPlug/jedi
Jedi didn't care for decorator 'dotted_name' nodes and therefore descriptor tests failed.
This commit is contained in:
@@ -192,6 +192,12 @@ class Evaluator(object):
|
||||
# `x if foo else y` case.
|
||||
return (self.eval_element(element.children[0]) +
|
||||
self.eval_element(element.children[-1]))
|
||||
elif pr.is_node(element, 'dotted_name'):
|
||||
types = self._eval_atom(element.children[0])
|
||||
for next_name in element.children[2::2]:
|
||||
types = list(chain.from_iterable(self.find_types(typ, next_name)
|
||||
for typ in types))
|
||||
return types
|
||||
else:
|
||||
return precedence.calculate_children(self, element.children)
|
||||
|
||||
|
||||
@@ -293,7 +293,6 @@ class NameFinder(object):
|
||||
|
||||
for name in names:
|
||||
typ = name.get_definition()
|
||||
print(name, typ)
|
||||
if typ.isinstance(pr.ForStmt):
|
||||
for_types = self._evaluator.eval_element(typ.children[-3])
|
||||
for_types = iterable.get_iterator_types(for_types)
|
||||
|
||||
@@ -101,6 +101,7 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
|
||||
# Generated instances are classes that are just generated by self
|
||||
# (No var_args) used.
|
||||
self.is_generated = is_generated
|
||||
self.decorates = None
|
||||
|
||||
@property
|
||||
def py__call__(self):
|
||||
@@ -228,7 +229,11 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
|
||||
return getattr(self.base, name)
|
||||
|
||||
def __repr__(self):
|
||||
return "<e%s of %s %s>" % (type(self).__name__, self.base, self.var_args)
|
||||
dec = ''
|
||||
if self.decorates is not None:
|
||||
dec = " decorates " + repr(self.decorates)
|
||||
return "<e%s of %s(%s)%s>" % (type(self).__name__, self.base,
|
||||
self.var_args.argument_node, dec)
|
||||
|
||||
|
||||
def get_instance_el(evaluator, instance, var, is_class_var=False):
|
||||
@@ -356,7 +361,6 @@ class Class(use_metaclass(CachedMetaClass, Wrapper)):
|
||||
def __init__(self, evaluator, base):
|
||||
self._evaluator = evaluator
|
||||
self.base = base
|
||||
self.decorates = None
|
||||
|
||||
@memoize_default(default=())
|
||||
def py__mro__(self, evaluator):
|
||||
@@ -498,7 +502,7 @@ class Function(use_metaclass(CachedMetaClass, Wrapper)):
|
||||
debug.warning('multiple wrappers found %s %s',
|
||||
self.base_func, wrappers)
|
||||
f = wrappers[0]
|
||||
if isinstance(f, (Class, Function)):
|
||||
if isinstance(f, (Instance, Function)):
|
||||
f.decorates = self
|
||||
|
||||
debug.dbg('decorator end %s', f)
|
||||
|
||||
Reference in New Issue
Block a user