forked from VimPlug/jedi
Fix parameter issues in functions that are defined on self.
This commit is contained in:
@@ -16,6 +16,8 @@ class AbstractInstanceContext(Context):
|
||||
"""
|
||||
This class is used to evaluate instances.
|
||||
"""
|
||||
api_type = 'instance'
|
||||
|
||||
def __init__(self, evaluator, parent_context, class_context, var_args):
|
||||
super(AbstractInstanceContext, self).__init__(evaluator, parent_context)
|
||||
# Generated instances are classes that are just generated by self
|
||||
@@ -237,8 +239,31 @@ class InstanceNameDefinition(filters.TreeNameDefinition):
|
||||
yield context
|
||||
|
||||
|
||||
class LazyInstanceName(filters.TreeNameDefinition):
|
||||
"""
|
||||
This name calculates the parent_context lazily.
|
||||
"""
|
||||
def __init__(self, instance, class_context, tree_name):
|
||||
self._instance = instance
|
||||
self._class_context = class_context
|
||||
self.tree_name = tree_name
|
||||
|
||||
@property
|
||||
def parent_context(self):
|
||||
return self._instance.create_instance_context(self._class_context, self.tree_name)
|
||||
|
||||
|
||||
class LazyInstanceClassName(LazyInstanceName):
|
||||
def infer(self):
|
||||
for v in super(LazyInstanceClassName, self).infer():
|
||||
if isinstance(v, er.FunctionContext):
|
||||
yield BoundMethod(self._instance, self._class_context, v)
|
||||
else:
|
||||
yield v
|
||||
|
||||
|
||||
class InstanceClassFilter(filters.ParserTreeFilter):
|
||||
name_class = InstanceNameDefinition
|
||||
name_class = LazyInstanceClassName
|
||||
|
||||
def __init__(self, evaluator, context, class_context, origin_scope):
|
||||
super(InstanceClassFilter, self).__init__(
|
||||
@@ -269,10 +294,12 @@ class InstanceClassFilter(filters.ParserTreeFilter):
|
||||
return names
|
||||
|
||||
def _convert_names(self, names):
|
||||
return [LazyInstanceName(self._context, self._class_context, name) for name in names]
|
||||
return [self.name_class(self._context, self._class_context, name) for name in names]
|
||||
|
||||
|
||||
class SelfNameFilter(InstanceClassFilter):
|
||||
name_class = LazyInstanceName
|
||||
|
||||
def _filter(self, names):
|
||||
names = self._filter_self_names(names)
|
||||
if isinstance(self._parser_scope, compiled.CompiledObject):
|
||||
@@ -298,28 +325,6 @@ class SelfNameFilter(InstanceClassFilter):
|
||||
yield name
|
||||
|
||||
|
||||
class LazyInstanceName(filters.TreeNameDefinition):
|
||||
"""
|
||||
This name calculates the parent_context lazily.
|
||||
"""
|
||||
def __init__(self, instance, class_context, tree_name):
|
||||
self._instance = instance
|
||||
self._class_context = class_context
|
||||
self.tree_name = tree_name
|
||||
|
||||
@property
|
||||
def parent_context(self):
|
||||
return self._instance.create_instance_context(self._class_context, self.tree_name)
|
||||
|
||||
def infer(self):
|
||||
values = super(LazyInstanceName, self).infer()
|
||||
for v in values:
|
||||
if isinstance(v, er.FunctionContext):
|
||||
yield BoundMethod(self._instance, self._class_context, v)
|
||||
else:
|
||||
yield v
|
||||
|
||||
|
||||
class InstanceVarArgs(object):
|
||||
def __init__(self, instance, funcdef, var_args):
|
||||
self._instance = instance
|
||||
|
||||
Reference in New Issue
Block a user