forked from VimPlug/jedi
Trying to start implementing instance filters.
This commit is contained in:
@@ -157,7 +157,7 @@ class CompiledObject(Base):
|
||||
def names_dicts(self, search_global, is_instance=False):
|
||||
return self._names_dict_ensure_one_dict(is_instance)
|
||||
|
||||
def get_filters(self, search_global, is_instance=False):
|
||||
def get_filters(self, search_global, is_instance=False, until_position=None):
|
||||
yield self._ensure_one_filter(is_instance)
|
||||
|
||||
@memoize_method
|
||||
@@ -237,7 +237,7 @@ class CompiledObject(Base):
|
||||
for name in dir(self.obj):
|
||||
try:
|
||||
faked_subscopes.append(
|
||||
fake.get_faked(module.obj, self.obj, parent=self, name=name)
|
||||
fake.get_faked(module, self.obj, parent=self, name=name)
|
||||
)
|
||||
except fake.FakeDoesNotExist:
|
||||
pass
|
||||
@@ -332,13 +332,14 @@ class CompiledObjectFilter(AbstractFilter):
|
||||
"""
|
||||
name_class = CompiledName
|
||||
|
||||
def __init__(self, evaluator, compiled_obj, is_instance=False):
|
||||
def __init__(self, evaluator, compiled_obj, origin_scope, is_instance=False):
|
||||
super(CompiledObjectFilter, self).__init__(origin_scope)
|
||||
self._evaluator = evaluator
|
||||
self._compiled_obj = compiled_obj
|
||||
self._is_instance = is_instance
|
||||
|
||||
@memoize_method
|
||||
def get(self, name, until_position=None):
|
||||
def get(self, name):
|
||||
name = str(name)
|
||||
try:
|
||||
getattr(self._compiled_obj.obj, name)
|
||||
@@ -351,7 +352,7 @@ class CompiledObjectFilter(AbstractFilter):
|
||||
return [FakeName(name, create(self._evaluator, None), is_definition=True)]
|
||||
return [self.name_class(self._evaluator, self._compiled_obj, name)]
|
||||
|
||||
def values(self, until_position=None):
|
||||
def values(self):
|
||||
raise NotImplementedError
|
||||
obj = self._compiled_obj.obj
|
||||
|
||||
@@ -511,7 +512,7 @@ def _parse_function_doc(doc):
|
||||
|
||||
def _create_from_name(evaluator, module, parent, name):
|
||||
try:
|
||||
return fake.get_faked(module.obj, parent.obj, parent=parent, name=name)
|
||||
return fake.get_faked(module, parent.obj, parent=parent, name=name)
|
||||
except fake.FakeDoesNotExist:
|
||||
pass
|
||||
|
||||
@@ -593,7 +594,7 @@ def create(evaluator, obj, parent=None, module=None):
|
||||
return create(evaluator, obj, create(evaluator, _builtins))
|
||||
|
||||
try:
|
||||
return fake.get_faked(module and module.obj, obj, parent=parent)
|
||||
return fake.get_faked(module, obj, parent=parent)
|
||||
except fake.FakeDoesNotExist:
|
||||
pass
|
||||
|
||||
|
||||
@@ -114,36 +114,39 @@ def _faked(module, obj, name):
|
||||
|
||||
faked_mod = _load_faked_module(module)
|
||||
if faked_mod is None:
|
||||
return None
|
||||
return None, None
|
||||
|
||||
module.used_names = faked_mod.used_names
|
||||
|
||||
# Having the module as a `parser.representation.module`, we need to scan
|
||||
# for methods.
|
||||
if name is None:
|
||||
if inspect.isbuiltin(obj):
|
||||
return search_scope(faked_mod, obj.__name__)
|
||||
return search_scope(faked_mod, obj.__name__), faked_mod
|
||||
elif not inspect.isclass(obj):
|
||||
# object is a method or descriptor
|
||||
try:
|
||||
objclass = obj.__objclass__
|
||||
except AttributeError:
|
||||
return None
|
||||
return None, None
|
||||
else:
|
||||
cls = search_scope(faked_mod, objclass.__name__)
|
||||
if cls is None:
|
||||
return None
|
||||
return search_scope(cls, obj.__name__)
|
||||
return None, None
|
||||
return search_scope(cls, obj.__name__), faked_mod
|
||||
else:
|
||||
if obj == module:
|
||||
return search_scope(faked_mod, name)
|
||||
return search_scope(faked_mod, name), faked_mod
|
||||
else:
|
||||
try:
|
||||
cls_name = obj.__name__
|
||||
except AttributeError:
|
||||
return None
|
||||
return None, None
|
||||
cls = search_scope(faked_mod, cls_name)
|
||||
if cls is None:
|
||||
return None
|
||||
return search_scope(cls, name)
|
||||
return None, None
|
||||
return search_scope(cls, name), faked_mod
|
||||
return None, None
|
||||
|
||||
|
||||
def memoize_faked(obj):
|
||||
@@ -171,7 +174,7 @@ def memoize_faked(obj):
|
||||
@memoize_faked
|
||||
def _get_faked(module, obj, name=None):
|
||||
obj = type(obj) if is_class_instance(obj) else obj
|
||||
result = _faked(module, obj, name)
|
||||
result, fake_module = _faked(module, obj, name)
|
||||
if result is None or isinstance(result, pt.Class):
|
||||
# We're not interested in classes. What we want is functions.
|
||||
raise FakeDoesNotExist
|
||||
@@ -184,12 +187,13 @@ def _get_faked(module, obj, name=None):
|
||||
new_line = pt.Newline('\n', (0, 0))
|
||||
docstr_node = pt.Node('simple_stmt', [string, new_line])
|
||||
suite.children.insert(1, docstr_node)
|
||||
return result
|
||||
return result, fake_module
|
||||
|
||||
|
||||
def get_faked(module, obj, name=None, parent=None):
|
||||
faked = _get_faked(module, obj, name)
|
||||
faked, fake_module = _get_faked(module and module.obj, obj, name)
|
||||
faked.parent = parent
|
||||
module.used_names = fake_module.used_names
|
||||
return faked
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user