forked from VimPlug/jedi
Temporary params of class solution.
This commit is contained in:
@@ -305,6 +305,9 @@ class FakeStatement(pr.ExprStmt):
|
|||||||
"""Overwriting the original start_pos property."""
|
"""Overwriting the original start_pos property."""
|
||||||
return self._start_pos
|
return self._start_pos
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<%s: %s>' % (type(self).__name__, self.values)
|
||||||
|
|
||||||
|
|
||||||
class FakeImport(pr.Import):
|
class FakeImport(pr.Import):
|
||||||
def __init__(self, name, parent, level=0):
|
def __init__(self, name, parent, level=0):
|
||||||
|
|||||||
@@ -230,6 +230,15 @@ class Array(use_metaclass(CachedMetaClass, IterableWrapper)):
|
|||||||
return "<e%s of %s>" % (type(self).__name__, self._array_node)
|
return "<e%s of %s>" % (type(self).__name__, self._array_node)
|
||||||
|
|
||||||
|
|
||||||
|
class FakeArray(Array):
|
||||||
|
def __init__(self, evaluator, values, type):
|
||||||
|
super(FakeArray, self).__init__(evaluator, values, type)
|
||||||
|
self._values = values
|
||||||
|
|
||||||
|
def _items(self):
|
||||||
|
return self._values
|
||||||
|
|
||||||
|
|
||||||
class MergedArray(Array):
|
class MergedArray(Array):
|
||||||
def __init__(self, evaluator, arrays):
|
def __init__(self, evaluator, arrays):
|
||||||
super(MergedArray, self).__init__(evaluator, arrays[-1]._array)
|
super(MergedArray, self).__init__(evaluator, arrays[-1]._array)
|
||||||
|
|||||||
@@ -64,13 +64,13 @@ class Arguments(object):
|
|||||||
|
|
||||||
|
|
||||||
class ExecutedParam(pr.Param):
|
class ExecutedParam(pr.Param):
|
||||||
def __init__(self):
|
def __init__(self, values):
|
||||||
"""Don't use this method, it's just here to overwrite the old one."""
|
"""Don't use this method, it's just here to overwrite the old one."""
|
||||||
pass
|
self.values = values
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_param(cls, param, parent, var_args):
|
def from_param(cls, values, param, parent, var_args):
|
||||||
instance = cls()
|
instance = cls(values)
|
||||||
before = ()
|
before = ()
|
||||||
for cls in param.__class__.__mro__:
|
for cls in param.__class__.__mro__:
|
||||||
with common.ignored(AttributeError):
|
with common.ignored(AttributeError):
|
||||||
@@ -143,8 +143,8 @@ def get_params(evaluator, func, var_args):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
non_matching_keys.append((key, va_values))
|
non_matching_keys.append((key, va_values))
|
||||||
else:
|
else:
|
||||||
result.append(_gen_param_name_copy(func, var_args, key_param,
|
result.append(_gen_param_name_copy(evaluator, func, var_args,
|
||||||
values=va_values))
|
key_param, values=va_values))
|
||||||
|
|
||||||
if k in keys_used:
|
if k in keys_used:
|
||||||
had_multiple_value_error = True
|
had_multiple_value_error = True
|
||||||
@@ -205,7 +205,7 @@ def get_params(evaluator, func, var_args):
|
|||||||
# Now add to result if it's not one of the previously covered cases.
|
# Now add to result if it's not one of the previously covered cases.
|
||||||
if not has_default_value and (not keys_only or param.stars == 2):
|
if not has_default_value and (not keys_only or param.stars == 2):
|
||||||
keys_used.add(unicode(param.get_name()))
|
keys_used.add(unicode(param.get_name()))
|
||||||
result.append(_gen_param_name_copy(func, var_args, param,
|
result.append(_gen_param_name_copy(evaluator, func, var_args, param,
|
||||||
keys=keys, values=values,
|
keys=keys, values=values,
|
||||||
array_type=array_type))
|
array_type=array_type))
|
||||||
|
|
||||||
@@ -215,7 +215,7 @@ def get_params(evaluator, func, var_args):
|
|||||||
# there's nothing to find for certain names.
|
# there's nothing to find for certain names.
|
||||||
for k in set(param_dict) - keys_used:
|
for k in set(param_dict) - keys_used:
|
||||||
param = param_dict[k]
|
param = param_dict[k]
|
||||||
result.append(_gen_param_name_copy(func, var_args, param))
|
result.append(_gen_param_name_copy(evaluator, func, var_args, param))
|
||||||
|
|
||||||
if not (non_matching_keys or had_multiple_value_error
|
if not (non_matching_keys or had_multiple_value_error
|
||||||
or param.stars or param.assignment_details):
|
or param.stars or param.assignment_details):
|
||||||
@@ -390,11 +390,10 @@ def _star_star_dict(evaluator, array, expression_list, func):
|
|||||||
return dct
|
return dct
|
||||||
|
|
||||||
|
|
||||||
def _gen_param_name_copy(func, var_args, param, keys=(), values=(), array_type=None):
|
def _gen_param_name_copy(evaluator, func, var_args, param, keys=(), values=(), array_type=None):
|
||||||
"""
|
"""
|
||||||
Create a param with the original scope (of varargs) as parent.
|
Create a param with the original scope (of varargs) as parent.
|
||||||
"""
|
"""
|
||||||
print(func, var_args, param, keys, values, array_type)
|
|
||||||
if isinstance(var_args, pr.Array):
|
if isinstance(var_args, pr.Array):
|
||||||
parent = var_args.parent
|
parent = var_args.parent
|
||||||
start_pos = var_args.start_pos
|
start_pos = var_args.start_pos
|
||||||
@@ -402,18 +401,20 @@ def _gen_param_name_copy(func, var_args, param, keys=(), values=(), array_type=N
|
|||||||
parent = func
|
parent = func
|
||||||
start_pos = 0, 0
|
start_pos = 0, 0
|
||||||
|
|
||||||
new_param = ExecutedParam.from_param(param, parent, var_args)
|
|
||||||
|
|
||||||
# create an Array (-> needed for *args/**kwargs tuples/dicts)
|
# create an Array (-> needed for *args/**kwargs tuples/dicts)
|
||||||
|
arr = iterable.FakeArray(evaluator, tuple(values), array_type)
|
||||||
|
# TODO change?!
|
||||||
|
"""
|
||||||
arr = pr.Array(helpers.FakeSubModule, start_pos, array_type, parent)
|
arr = pr.Array(helpers.FakeSubModule, start_pos, array_type, parent)
|
||||||
arr.values = list(values) # Arrays only work with list.
|
|
||||||
key_stmts = []
|
key_stmts = []
|
||||||
for key in keys:
|
for key in keys:
|
||||||
key_stmts.append(helpers.FakeStatement([key], start_pos))
|
key_stmts.append(helpers.FakeStatement([key], start_pos))
|
||||||
arr.keys = key_stmts
|
arr.keys = key_stmts
|
||||||
arr.type = array_type
|
arr.type = array_type
|
||||||
|
"""
|
||||||
|
|
||||||
|
new_param = ExecutedParam.from_param([arr], param, parent, var_args)
|
||||||
|
|
||||||
new_param.set_expression_list([arr])
|
|
||||||
|
|
||||||
name = copy.copy(param.get_name())
|
name = copy.copy(param.get_name())
|
||||||
name.parent = new_param
|
name.parent = new_param
|
||||||
|
|||||||
@@ -764,7 +764,7 @@ class Function(ClassOrFunc):
|
|||||||
return []
|
return []
|
||||||
if is_node(node[0], 'typedargslist'):
|
if is_node(node[0], 'typedargslist'):
|
||||||
params = []
|
params = []
|
||||||
iterator = node[0].children
|
iterator = iter(node[0].children)
|
||||||
for n in iterator:
|
for n in iterator:
|
||||||
stars = 0
|
stars = 0
|
||||||
if n in ('*', '**'):
|
if n in ('*', '**'):
|
||||||
|
|||||||
Reference in New Issue
Block a user