1
0
forked from VimPlug/jedi

in the process...

This commit is contained in:
Dave Halter
2014-01-11 02:55:50 +01:00
parent e7c7bbca79
commit 28ab937eca
4 changed files with 19 additions and 10 deletions

View File

@@ -411,6 +411,7 @@ class Evaluator(object):
debug.warning("no __call__ func available", obj)
else:
debug.warning("no execution possible", obj)
raise NotImplementedError()
else:
stmts = er.FunctionExecution(self, obj, params).get_return_types(evaluate_generator)

View File

@@ -34,7 +34,7 @@ class PyObject(Base):
def get_parent_until(self, *args, **kwargs):
# compiled modules only use functions and classes/methods (2 levels)
return getattr(self.parent, 'parent', self.parent) or self
return getattr(self.parent, 'parent', self.parent) or self.parent or self
@underscore_memoization
def _parse_function_doc(self):
@@ -74,7 +74,8 @@ class PyObject(Base):
def get_subscope_by_name(self, name):
if name in dir(self._cls().obj):
return PyName(self._cls, name).parent
print PyName(self._cls(), name).parent
return PyName(self._cls(), name).parent
else:
raise KeyError("CompiledObject doesn't have an attribute '%s'." % name)
@@ -116,14 +117,14 @@ class PyName(object):
@underscore_memoization
def parent(self):
try:
# this has a builtin_function_or_method
return create(getattr(self._obj.obj, self._name), self._obj,
module=self._obj.get_parent_until())
o = getattr(self._obj.obj, self._name)
except AttributeError:
# happens e.g. in properties of
# PyQt4.QtGui.QStyleOptionComboBox.currentText
# -> just set it to None
return PyObject(None, builtin)
else:
return create(o, self._obj, module=self._obj.get_parent_until())
@property
def names(self):

View File

@@ -75,7 +75,7 @@ def _load_module(module):
with open(os.path.join(path, 'fake', module_name) + '.pym') as f:
source = f.read()
except IOError:
return {}
return
module = Parser(source, module_name).module
modules[module_name] = module
return module
@@ -88,6 +88,8 @@ def get_faked(module, obj):
return s
mod = _load_module(module)
if mod is None:
return
# Having the module as a `parser.representation.module`, we need to scan
# for methods.
@@ -97,8 +99,10 @@ def get_faked(module, obj):
return from_scope(mod, obj)
elif not inspect.isclass(obj):
# object is a method or descriptor
cls = obj.__objclass__
return from_scope(from_scope(mod, cls), obj)
cls = from_scope(mod, obj.__objclass__)
if cls is None:
return
return from_scope(cls, obj)
def is_class_instance(obj):

View File

@@ -122,6 +122,7 @@ class Instance(use_metaclass(CachedMetaClass, Executable)):
def get_subscope_by_name(self, name):
sub = self.base.get_subscope_by_name(name)
print sub
return InstanceElement(self._evaluator, self, sub, True)
def execute_subscope_by_name(self, name, args=()):
@@ -199,11 +200,13 @@ class InstanceElement(use_metaclass(CachedMetaClass, pr.Base)):
def parent(self):
par = self.var.parent
if isinstance(par, Class) and par == self.instance.base \
or isinstance(par, pr.Class) \
or isinstance(par, pr.Class) \
and par == self.instance.base.base:
par = self.instance
elif not isinstance(par, pr.Module):
elif not isinstance(par, (pr.Module, compiled.PyObject)):
print 'HA', par, self.var
par = InstanceElement(self.instance._evaluator, self.instance, par, self.is_class_var)
print 'H2A', par
return par
def get_parent_until(self, *args, **kwargs):