diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index 990cacd9..34a45b75 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -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): diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index cf2cf916..77a9e70a 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -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) diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index 985b08b5..6a78c914 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -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 diff --git a/jedi/evaluate/param.py b/jedi/evaluate/param.py index c363ed61..829401da 100644 --- a/jedi/evaluate/param.py +++ b/jedi/evaluate/param.py @@ -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)