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):
|
||||
# Ensures that a PyObject is returned that is not an instance (like list)
|
||||
if fake.is_class_instance(self.obj):
|
||||
return PyObject(self.obj.__class__, self.parent, True)
|
||||
return PyObject(self.obj.__class__, self.parent)
|
||||
return 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
|
||||
|
||||
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.
|
||||
"""
|
||||
names = []
|
||||
none_pos = (0, 0)
|
||||
executes_generator = ('__next__', 'send')
|
||||
for n in ('close', 'throw') + executes_generator:
|
||||
name = pr.Name(compiled.builtin, [(n, none_pos)],
|
||||
none_pos, none_pos)
|
||||
if n in executes_generator:
|
||||
name.parent = self
|
||||
else:
|
||||
name.parent = compiled.builtin
|
||||
names.append(name)
|
||||
parent = self if n in executes_generator else compiled.builtin
|
||||
names.append(helpers.FakeName(n, parent))
|
||||
debug.dbg('generator names', names)
|
||||
return names
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import copy
|
||||
from jedi.parser import representation as pr
|
||||
from jedi.evaluate import iterable
|
||||
from jedi.evaluate import common
|
||||
from jedi.evaluate import helpers
|
||||
|
||||
|
||||
def get_params(evaluator, func, var_args):
|
||||
@@ -23,11 +24,11 @@ def get_params(evaluator, func, var_args):
|
||||
new_param.parent = parent
|
||||
|
||||
# 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
|
||||
key_stmts = []
|
||||
for key in keys:
|
||||
stmt = pr.Statement(_FakeSubModule, [], start_pos, None)
|
||||
stmt = pr.Statement(helpers.FakeSubModule, [], start_pos, None)
|
||||
stmt._expression_list = [key]
|
||||
key_stmts.append(stmt)
|
||||
arr.keys = key_stmts
|
||||
@@ -139,7 +140,7 @@ def _var_args_iterator(evaluator, var_args):
|
||||
continue
|
||||
old = stmt
|
||||
# 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]
|
||||
|
||||
# *args
|
||||
@@ -154,7 +155,7 @@ def _var_args_iterator(evaluator, var_args):
|
||||
yield None, field_stmt
|
||||
elif isinstance(array, iterable.Generator):
|
||||
for field_stmt in array.iter_content():
|
||||
yield None, _FakeStatement(field_stmt)
|
||||
yield None, helpers._FakeStatement([field_stmt])
|
||||
# **kwargs
|
||||
elif expression_list[0] == '**':
|
||||
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
|
||||
else:
|
||||
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