From e7e802408b66dfb78d89fde3a5ee806d4dc70f14 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Thu, 9 Jan 2014 01:52:10 +0100 Subject: [PATCH] fix some api stuff for PyObject --- jedi/api/classes.py | 4 +++- jedi/evaluate/compiled.py | 12 ++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/jedi/api/classes.py b/jedi/api/classes.py index 6328808a..bca6975a 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -493,7 +493,9 @@ class Definition(BaseDefinition): if isinstance(d, pr.Name): d = d.parent - if isinstance(d, iterable.Array): + if isinstance(d, compiled.PyObject): + d = d.type() + ' ' + d.name + elif isinstance(d, iterable.Array): d = 'class ' + d.type elif isinstance(d, (pr.Class, er.Class, er.Instance)): d = 'class ' + unicode(d.name) diff --git a/jedi/evaluate/compiled.py b/jedi/evaluate/compiled.py index 6c0b876a..2d10b703 100644 --- a/jedi/evaluate/compiled.py +++ b/jedi/evaluate/compiled.py @@ -43,12 +43,13 @@ class PyObject(Base): elif inspect.isbuiltin(self.obj) or inspect.ismethod(self.obj) \ or inspect.ismethoddescriptor(self.obj): return 'def' + raise NotImplementedError() def get_defined_names(self): # We don't want to execute properties, therefore we have to try to get # the class cls = self - if not inspect.isclass(self.obj): + if self.type() not in ('class', 'module'): cls = PyObject(self.obj.__class__, self.parent) for name in dir(cls.obj): @@ -60,10 +61,10 @@ class PyObject(Base): return self.obj.__name__ def execute(self, params): - if inspect.isclass(self.obj): + t = self.type() + if t == 'class': yield PyObject(self.obj, self.parent, True) - elif inspect.isbuiltin(self.obj) or inspect.ismethod(self.obj) \ - or inspect.ismethoddescriptor(self.obj): + elif t == 'def': for name in self._parse_function_doc()[1].split(): try: yield PyObject(getattr(_builtins, name), builtin, True) @@ -77,6 +78,9 @@ class PyName(object): self._name = name self.start_pos = 0, 0 # an illegal start_pos, to make sorting easy. + def __repr__(self): + return '<%s: %s.%s>' % (type(self).__name__, self._obj.obj, self._name) + @property @underscore_memoization def parent(self):