1
0
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:
Dave Halter
2014-01-11 13:41:03 +01:00
parent 6f9d834a93
commit fc35e69a16
4 changed files with 24 additions and 23 deletions

View File

@@ -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):

View File

@@ -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)

View File

@@ -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

View File

@@ -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)