forked from VimPlug/jedi
Start making executions work.
This commit is contained in:
@@ -170,6 +170,7 @@ class Evaluator(object):
|
||||
if trailer == '**': # has a power operation.
|
||||
raise NotImplementedError
|
||||
types = self.eval_trailer(types, trailer)
|
||||
return types
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
||||
@@ -191,6 +192,8 @@ class Evaluator(object):
|
||||
|
||||
def eval_trailer(self, types, trailer):
|
||||
trailer_op, node = trailer.children[:2]
|
||||
if node == ')': # `arglist` is optional.
|
||||
node = None
|
||||
new_types = []
|
||||
for typ in types:
|
||||
if trailer_op == '.':
|
||||
@@ -202,15 +205,16 @@ class Evaluator(object):
|
||||
return new_types
|
||||
|
||||
@debug.increase_indent
|
||||
def execute(self, obj, params=()):
|
||||
def execute(self, obj, arguments=()):
|
||||
arguments = er.Arguments(self, arguments)
|
||||
if obj.isinstance(er.Function):
|
||||
obj = obj.get_decorated_func()
|
||||
|
||||
debug.dbg('execute: %s %s', obj, params)
|
||||
debug.dbg('execute: %s %s', obj, arguments)
|
||||
try:
|
||||
# Some stdlib functions like super(), namedtuple(), etc. have been
|
||||
# hard-coded in Jedi to support them.
|
||||
return stdlib.execute(self, obj, params)
|
||||
return stdlib.execute(self, obj, arguments)
|
||||
except stdlib.NotInStdLib:
|
||||
pass
|
||||
|
||||
@@ -220,7 +224,7 @@ class Evaluator(object):
|
||||
debug.warning("no execution possible %s", obj)
|
||||
return []
|
||||
else:
|
||||
types = func(self, params)
|
||||
types = func(self, arguments)
|
||||
debug.dbg('execute result: %s in %s', types, obj)
|
||||
return types
|
||||
|
||||
|
||||
@@ -335,6 +335,31 @@ class InstanceElement(use_metaclass(CachedMetaClass, pr.Base)):
|
||||
return "<%s of %s>" % (type(self).__name__, self.var)
|
||||
|
||||
|
||||
class Arguments(object):
|
||||
def __init__(self, evaluator, argument_node):
|
||||
self._argument_node = argument_node
|
||||
self._evaluator = evaluator
|
||||
|
||||
def _split(self):
|
||||
iterator = iter(self._argument_node.children)
|
||||
for child in iterator:
|
||||
if child == ',':
|
||||
continue
|
||||
elif child in ('*', '**'):
|
||||
yield len(child), next(iterator)
|
||||
else:
|
||||
yield 0, child
|
||||
|
||||
def kwargs(self):
|
||||
return []
|
||||
|
||||
def args(self):
|
||||
return []
|
||||
|
||||
def eval_args(self):
|
||||
return [self._evaluator.eval_element(el) for stars, el in self._split()]
|
||||
|
||||
|
||||
class Wrapper(pr.Base):
|
||||
def is_scope(self):
|
||||
return True
|
||||
|
||||
@@ -581,7 +581,9 @@ class SubModule(Scope, Module):
|
||||
string = re.sub('\.[a-z]+-\d{2}[mud]{0,3}$', '', r.group(1))
|
||||
# Positions are not real, but a module starts at (1, 0)
|
||||
p = (1, 0)
|
||||
return Name(self, string, self.use_as_parent, p)
|
||||
name = Name(string, p)
|
||||
name.parent = self
|
||||
return name
|
||||
|
||||
@property
|
||||
def has_explicit_absolute_import(self):
|
||||
|
||||
Reference in New Issue
Block a user