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) debug.warning("no __call__ func available", obj)
else: else:
debug.warning("no execution possible", obj) debug.warning("no execution possible", obj)
raise NotImplementedError()
else: else:
stmts = er.FunctionExecution(self, obj, params).get_return_types(evaluate_generator) 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): def get_parent_until(self, *args, **kwargs):
# compiled modules only use functions and classes/methods (2 levels) # 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 @underscore_memoization
def _parse_function_doc(self): def _parse_function_doc(self):
@@ -74,7 +74,8 @@ class PyObject(Base):
def get_subscope_by_name(self, name): def get_subscope_by_name(self, name):
if name in dir(self._cls().obj): 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: else:
raise KeyError("CompiledObject doesn't have an attribute '%s'." % name) raise KeyError("CompiledObject doesn't have an attribute '%s'." % name)
@@ -116,14 +117,14 @@ class PyName(object):
@underscore_memoization @underscore_memoization
def parent(self): def parent(self):
try: try:
# this has a builtin_function_or_method o = getattr(self._obj.obj, self._name)
return create(getattr(self._obj.obj, self._name), self._obj,
module=self._obj.get_parent_until())
except AttributeError: except AttributeError:
# happens e.g. in properties of # happens e.g. in properties of
# PyQt4.QtGui.QStyleOptionComboBox.currentText # PyQt4.QtGui.QStyleOptionComboBox.currentText
# -> just set it to None # -> just set it to None
return PyObject(None, builtin) return PyObject(None, builtin)
else:
return create(o, self._obj, module=self._obj.get_parent_until())
@property @property
def names(self): 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: with open(os.path.join(path, 'fake', module_name) + '.pym') as f:
source = f.read() source = f.read()
except IOError: except IOError:
return {} return
module = Parser(source, module_name).module module = Parser(source, module_name).module
modules[module_name] = module modules[module_name] = module
return module return module
@@ -88,6 +88,8 @@ def get_faked(module, obj):
return s return s
mod = _load_module(module) mod = _load_module(module)
if mod is None:
return
# Having the module as a `parser.representation.module`, we need to scan # Having the module as a `parser.representation.module`, we need to scan
# for methods. # for methods.
@@ -97,8 +99,10 @@ def get_faked(module, obj):
return from_scope(mod, obj) return from_scope(mod, obj)
elif not inspect.isclass(obj): elif not inspect.isclass(obj):
# object is a method or descriptor # object is a method or descriptor
cls = obj.__objclass__ cls = from_scope(mod, obj.__objclass__)
return from_scope(from_scope(mod, cls), obj) if cls is None:
return
return from_scope(cls, obj)
def is_class_instance(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): def get_subscope_by_name(self, name):
sub = self.base.get_subscope_by_name(name) sub = self.base.get_subscope_by_name(name)
print sub
return InstanceElement(self._evaluator, self, sub, True) return InstanceElement(self._evaluator, self, sub, True)
def execute_subscope_by_name(self, name, args=()): def execute_subscope_by_name(self, name, args=()):
@@ -199,11 +200,13 @@ class InstanceElement(use_metaclass(CachedMetaClass, pr.Base)):
def parent(self): def parent(self):
par = self.var.parent par = self.var.parent
if isinstance(par, Class) and par == self.instance.base \ 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: and par == self.instance.base.base:
par = self.instance 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) par = InstanceElement(self.instance._evaluator, self.instance, par, self.is_class_var)
print 'H2A', par
return par return par
def get_parent_until(self, *args, **kwargs): def get_parent_until(self, *args, **kwargs):