forked from VimPlug/jedi
adding helpers.FakeName and other fakes to make it easier to fake parser names and statements
This commit is contained in:
@@ -59,7 +59,7 @@ class PyObject(Base):
|
|||||||
def _cls(self):
|
def _cls(self):
|
||||||
# Ensures that a PyObject is returned that is not an instance (like list)
|
# Ensures that a PyObject is returned that is not an instance (like list)
|
||||||
if fake.is_class_instance(self.obj):
|
if fake.is_class_instance(self.obj):
|
||||||
return PyObject(self.obj.__class__, self.parent, True)
|
return PyObject(self.obj.__class__, self.parent)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def get_defined_names(self):
|
def get_defined_names(self):
|
||||||
|
|||||||
@@ -156,3 +156,19 @@ def scan_statement_for_calls(stmt, search_name, assignment_details=False):
|
|||||||
s_new = s_new.next
|
s_new = s_new.next
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
class FakeSubModule():
|
||||||
|
line_offset = 0
|
||||||
|
|
||||||
|
|
||||||
|
class FakeStatement(pr.Statement):
|
||||||
|
def __init__(self, token_list):
|
||||||
|
p = 0, 0
|
||||||
|
super(FakeStatement, self).__init__(FakeSubModule, token_list, p, p)
|
||||||
|
|
||||||
|
|
||||||
|
class FakeName(pr.Name):
|
||||||
|
def __init__(self, name, parent=None):
|
||||||
|
p = 0, 0
|
||||||
|
super(FakeName, self).__init__(FakeSubModule, [(name, p)], p, p, parent)
|
||||||
|
|||||||
@@ -24,16 +24,10 @@ class Generator(use_metaclass(CachedMetaClass, pr.Base)):
|
|||||||
content of a generator.
|
content of a generator.
|
||||||
"""
|
"""
|
||||||
names = []
|
names = []
|
||||||
none_pos = (0, 0)
|
|
||||||
executes_generator = ('__next__', 'send')
|
executes_generator = ('__next__', 'send')
|
||||||
for n in ('close', 'throw') + executes_generator:
|
for n in ('close', 'throw') + executes_generator:
|
||||||
name = pr.Name(compiled.builtin, [(n, none_pos)],
|
parent = self if n in executes_generator else compiled.builtin
|
||||||
none_pos, none_pos)
|
names.append(helpers.FakeName(n, parent))
|
||||||
if n in executes_generator:
|
|
||||||
name.parent = self
|
|
||||||
else:
|
|
||||||
name.parent = compiled.builtin
|
|
||||||
names.append(name)
|
|
||||||
debug.dbg('generator names', names)
|
debug.dbg('generator names', names)
|
||||||
return names
|
return names
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import copy
|
|||||||
from jedi.parser import representation as pr
|
from jedi.parser import representation as pr
|
||||||
from jedi.evaluate import iterable
|
from jedi.evaluate import iterable
|
||||||
from jedi.evaluate import common
|
from jedi.evaluate import common
|
||||||
|
from jedi.evaluate import helpers
|
||||||
|
|
||||||
|
|
||||||
def get_params(evaluator, func, var_args):
|
def get_params(evaluator, func, var_args):
|
||||||
@@ -23,11 +24,11 @@ def get_params(evaluator, func, var_args):
|
|||||||
new_param.parent = parent
|
new_param.parent = parent
|
||||||
|
|
||||||
# create an Array (-> needed for *args/**kwargs tuples/dicts)
|
# create an Array (-> needed for *args/**kwargs tuples/dicts)
|
||||||
arr = pr.Array(_FakeSubModule, start_pos, array_type, parent)
|
arr = pr.Array(helpers.FakeSubModule, start_pos, array_type, parent)
|
||||||
arr.values = values
|
arr.values = values
|
||||||
key_stmts = []
|
key_stmts = []
|
||||||
for key in keys:
|
for key in keys:
|
||||||
stmt = pr.Statement(_FakeSubModule, [], start_pos, None)
|
stmt = pr.Statement(helpers.FakeSubModule, [], start_pos, None)
|
||||||
stmt._expression_list = [key]
|
stmt._expression_list = [key]
|
||||||
key_stmts.append(stmt)
|
key_stmts.append(stmt)
|
||||||
arr.keys = key_stmts
|
arr.keys = key_stmts
|
||||||
@@ -139,7 +140,7 @@ def _var_args_iterator(evaluator, var_args):
|
|||||||
continue
|
continue
|
||||||
old = stmt
|
old = stmt
|
||||||
# generate a statement if it's not already one.
|
# generate a statement if it's not already one.
|
||||||
stmt = pr.Statement(_FakeSubModule, [], (0, 0), None)
|
stmt = pr.Statement(helpers.FakeSubModule, [], (0, 0), None)
|
||||||
stmt._expression_list = [old]
|
stmt._expression_list = [old]
|
||||||
|
|
||||||
# *args
|
# *args
|
||||||
@@ -154,7 +155,7 @@ def _var_args_iterator(evaluator, var_args):
|
|||||||
yield None, field_stmt
|
yield None, field_stmt
|
||||||
elif isinstance(array, iterable.Generator):
|
elif isinstance(array, iterable.Generator):
|
||||||
for field_stmt in array.iter_content():
|
for field_stmt in array.iter_content():
|
||||||
yield None, _FakeStatement(field_stmt)
|
yield None, helpers._FakeStatement([field_stmt])
|
||||||
# **kwargs
|
# **kwargs
|
||||||
elif expression_list[0] == '**':
|
elif expression_list[0] == '**':
|
||||||
for array in evaluator.eval_expression_list(expression_list[1:]):
|
for array in evaluator.eval_expression_list(expression_list[1:]):
|
||||||
@@ -175,13 +176,3 @@ def _var_args_iterator(evaluator, var_args):
|
|||||||
yield key_arr[0].name, stmt
|
yield key_arr[0].name, stmt
|
||||||
else:
|
else:
|
||||||
yield None, stmt
|
yield None, stmt
|
||||||
|
|
||||||
|
|
||||||
class _FakeSubModule():
|
|
||||||
line_offset = 0
|
|
||||||
|
|
||||||
|
|
||||||
class _FakeStatement(pr.Statement):
|
|
||||||
def __init__(self, content):
|
|
||||||
p = 0, 0
|
|
||||||
super(_FakeStatement, self).__init__(_FakeSubModule, [content], p, p)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user