diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index 06ead89d..2dd2fc93 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -295,11 +295,16 @@ class FakeArray(pr.Array): class FakeStatement(pr.ExprStmt): def __init__(self, values, start_pos=(0, 0), parent=None): - p = start_pos + self._start_pos = start_pos super(FakeStatement, self).__init__([]) self.values = values self.parent = parent + @property + def start_pos(self): + """Overwriting the original start_pos property.""" + return self._start_pos + class FakeImport(pr.Import): def __init__(self, name, parent, level=0): diff --git a/jedi/evaluate/param.py b/jedi/evaluate/param.py index ac5a43ad..2cbf514a 100644 --- a/jedi/evaluate/param.py +++ b/jedi/evaluate/param.py @@ -394,6 +394,7 @@ def _gen_param_name_copy(func, var_args, param, keys=(), values=(), array_type=N """ Create a param with the original scope (of varargs) as parent. """ + print(func, var_args, param, keys, values, array_type) if isinstance(var_args, pr.Array): parent = var_args.parent start_pos = var_args.start_pos diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index b4fa36f0..12d591ae 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -155,13 +155,14 @@ class Instance(use_metaclass(CachedMetaClass, Executed)): # because to follow them and their self variables is too # complicated. sub = self._get_method_execution(sub) - print(sub.names_dict.values()) for name_list in sub.names_dict.values(): for name in name_list: - if name.value == self_name: - next = name.next_sibling() - if isinstance(next, pr.Name) and next.is_definition(): - names.append(get_instance_el(self._evaluator, self, next)) + if name.value == self_name and name.prev_sibling() is None: + trailer = name.next_sibling() + if pr.is_node(trailer, 'trailer') \ + and len(trailer.children) == 2: + name = trailer.children[1] # After dot. + names.append(get_instance_el(self._evaluator, self, name)) for s in self.base.py__bases__(self._evaluator): if not isinstance(s, compiled.CompiledObject): diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index 4442b643..0e028aa7 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -208,6 +208,18 @@ class _Leaf(Base): except IndexError: return None + def prev_sibling(self): + """ + The node immediately preceding the invocant in their parent's children + list. If the invocant does not have a previous sibling, it is None. + """ + # Can't use index(); we need to test by identity + for i, child in enumerate(self.parent.children): + if child is self: + if i == 0: + return None + return self.parent.children[i - 1] + def __repr__(self): return "<%s: %s>" % (type(self).__name__, repr(self.value)) @@ -1249,6 +1261,10 @@ class Param(object): annotation_stmt.parent = self.use_as_parent self.annotation_stmt = annotation_stmt + def __repr__(self): + default = '' if self.default is None else '=%s' % self.default + return '<%s: %s>' % (type(self).__name__, str(self.tfpdef) + default) + class StatementElement(Simple): __slots__ = ('next', 'previous')