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.
|
# `x if foo else y` case.
|
||||||
return (self.eval_element(element.children[0]) +
|
return (self.eval_element(element.children[0]) +
|
||||||
self.eval_element(element.children[-1]))
|
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:
|
else:
|
||||||
return precedence.calculate_children(self, element.children)
|
return precedence.calculate_children(self, element.children)
|
||||||
|
|
||||||
|
|||||||
@@ -293,7 +293,6 @@ class NameFinder(object):
|
|||||||
|
|
||||||
for name in names:
|
for name in names:
|
||||||
typ = name.get_definition()
|
typ = name.get_definition()
|
||||||
print(name, typ)
|
|
||||||
if typ.isinstance(pr.ForStmt):
|
if typ.isinstance(pr.ForStmt):
|
||||||
for_types = self._evaluator.eval_element(typ.children[-3])
|
for_types = self._evaluator.eval_element(typ.children[-3])
|
||||||
for_types = iterable.get_iterator_types(for_types)
|
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
|
# Generated instances are classes that are just generated by self
|
||||||
# (No var_args) used.
|
# (No var_args) used.
|
||||||
self.is_generated = is_generated
|
self.is_generated = is_generated
|
||||||
|
self.decorates = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def py__call__(self):
|
def py__call__(self):
|
||||||
@@ -228,7 +229,11 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
|
|||||||
return getattr(self.base, name)
|
return getattr(self.base, name)
|
||||||
|
|
||||||
def __repr__(self):
|
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):
|
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):
|
def __init__(self, evaluator, base):
|
||||||
self._evaluator = evaluator
|
self._evaluator = evaluator
|
||||||
self.base = base
|
self.base = base
|
||||||
self.decorates = None
|
|
||||||
|
|
||||||
@memoize_default(default=())
|
@memoize_default(default=())
|
||||||
def py__mro__(self, evaluator):
|
def py__mro__(self, evaluator):
|
||||||
@@ -498,7 +502,7 @@ class Function(use_metaclass(CachedMetaClass, Wrapper)):
|
|||||||
debug.warning('multiple wrappers found %s %s',
|
debug.warning('multiple wrappers found %s %s',
|
||||||
self.base_func, wrappers)
|
self.base_func, wrappers)
|
||||||
f = wrappers[0]
|
f = wrappers[0]
|
||||||
if isinstance(f, (Class, Function)):
|
if isinstance(f, (Instance, Function)):
|
||||||
f.decorates = self
|
f.decorates = self
|
||||||
|
|
||||||
debug.dbg('decorator end %s', f)
|
debug.dbg('decorator end %s', f)
|
||||||
|
|||||||
Reference in New Issue
Block a user