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

View File

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

View File

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

View File

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