forked from VimPlug/jedi
parent_value -> parent_context
This commit is contained in:
@@ -28,7 +28,7 @@ class LambdaName(AbstractNameDefinition):
|
||||
|
||||
def __init__(self, lambda_value):
|
||||
self._lambda_value = lambda_value
|
||||
self.parent_value = lambda_value.parent_value
|
||||
self.parent_context = lambda_value.parent_context
|
||||
|
||||
@property
|
||||
def start_pos(self):
|
||||
@@ -40,13 +40,13 @@ class LambdaName(AbstractNameDefinition):
|
||||
|
||||
class FunctionAndClassBase(TreeValue):
|
||||
def get_qualified_names(self):
|
||||
if self.parent_value.is_class():
|
||||
n = self.parent_value.get_qualified_names()
|
||||
if self.parent_context.is_class():
|
||||
n = self.parent_context.get_qualified_names()
|
||||
if n is None:
|
||||
# This means that the parent class lives within a function.
|
||||
return None
|
||||
return n + (self.py__name__(),)
|
||||
elif self.parent_value.is_module():
|
||||
elif self.parent_context.is_module():
|
||||
return (self.py__name__(),)
|
||||
else:
|
||||
return None
|
||||
@@ -98,7 +98,7 @@ class FunctionMixin(object):
|
||||
if arguments is None:
|
||||
arguments = AnonymousArguments()
|
||||
|
||||
return FunctionExecutionValue(self.infer_state, self.parent_value, self, arguments)
|
||||
return FunctionExecutionValue(self.infer_state, self.parent_context, self, arguments)
|
||||
|
||||
def get_signatures(self):
|
||||
return [TreeSignature(f) for f in self.get_signature_functions()]
|
||||
@@ -115,21 +115,21 @@ class FunctionValue(use_metaclass(CachedMetaClass, FunctionMixin, FunctionAndCla
|
||||
return MethodValue(
|
||||
value.infer_state,
|
||||
value,
|
||||
parent_value=parent_value,
|
||||
parent_context=parent_context,
|
||||
tree_node=tree_node
|
||||
)
|
||||
else:
|
||||
return cls(
|
||||
value.infer_state,
|
||||
parent_value=parent_value,
|
||||
parent_context=parent_context,
|
||||
tree_node=tree_node
|
||||
)
|
||||
|
||||
overloaded_funcs = list(_find_overload_functions(value, tree_node))
|
||||
|
||||
parent_value = value
|
||||
while parent_value.is_class() or parent_value.is_instance():
|
||||
parent_value = parent_value.parent_value
|
||||
parent_context = value
|
||||
while parent_context.is_class() or parent_context.is_instance():
|
||||
parent_context = parent_context.parent_context
|
||||
|
||||
function = create(tree_node)
|
||||
|
||||
@@ -145,7 +145,7 @@ class FunctionValue(use_metaclass(CachedMetaClass, FunctionMixin, FunctionAndCla
|
||||
return c
|
||||
|
||||
def get_default_param_value(self):
|
||||
return self.parent_value
|
||||
return self.parent_context
|
||||
|
||||
def get_signature_functions(self):
|
||||
return [self]
|
||||
@@ -171,10 +171,10 @@ class MethodValue(FunctionValue):
|
||||
class FunctionExecutionValue(TreeValue):
|
||||
function_execution_filter = FunctionExecutionFilter
|
||||
|
||||
def __init__(self, infer_state, parent_value, function_value, var_args):
|
||||
def __init__(self, infer_state, parent_context, function_value, var_args):
|
||||
super(FunctionExecutionValue, self).__init__(
|
||||
infer_state,
|
||||
parent_value,
|
||||
parent_context,
|
||||
function_value.tree_node,
|
||||
)
|
||||
self.function_value = function_value
|
||||
|
||||
@@ -61,8 +61,8 @@ class AnonymousInstanceArguments(AnonymousArguments):
|
||||
class AbstractInstanceValue(Value):
|
||||
api_type = u'instance'
|
||||
|
||||
def __init__(self, infer_state, parent_value, class_value, var_args):
|
||||
super(AbstractInstanceValue, self).__init__(infer_state, parent_value)
|
||||
def __init__(self, infer_state, parent_context, class_value, var_args):
|
||||
super(AbstractInstanceValue, self).__init__(infer_state, parent_context)
|
||||
# Generated instances are classes that are just generated by self
|
||||
# (No var_args) used.
|
||||
self.class_value = class_value
|
||||
@@ -193,7 +193,7 @@ class AbstractInstanceValue(Value):
|
||||
# TODO is this correct? I think we need to check for functions.
|
||||
if isinstance(name, LazyInstanceClassName):
|
||||
function = FunctionValue.from_value(
|
||||
self.parent_value,
|
||||
self.parent_context,
|
||||
name.tree_name.parent
|
||||
)
|
||||
bound_method = BoundMethod(self, function)
|
||||
@@ -207,19 +207,19 @@ class AbstractInstanceValue(Value):
|
||||
if scope == class_value.tree_node:
|
||||
return class_value
|
||||
else:
|
||||
parent_value = self.create_instance_value(class_value, scope)
|
||||
parent_context = self.create_instance_value(class_value, scope)
|
||||
if scope.type == 'funcdef':
|
||||
func = FunctionValue.from_value(
|
||||
parent_value,
|
||||
parent_context,
|
||||
scope,
|
||||
)
|
||||
bound_method = BoundMethod(self, func)
|
||||
if scope.name.value == '__init__' and parent_value == class_value:
|
||||
if scope.name.value == '__init__' and parent_context == class_value:
|
||||
return bound_method.get_function_execution(self.var_args)
|
||||
else:
|
||||
return bound_method.get_function_execution()
|
||||
elif scope.type == 'classdef':
|
||||
class_value = ClassValue(self.infer_state, parent_value, scope)
|
||||
class_value = ClassValue(self.infer_state, parent_context, scope)
|
||||
return class_value
|
||||
elif scope.type in ('comp_for', 'sync_comp_for'):
|
||||
# Comprehensions currently don't have a special scope in Jedi.
|
||||
@@ -238,9 +238,9 @@ class AbstractInstanceValue(Value):
|
||||
|
||||
|
||||
class CompiledInstance(AbstractInstanceValue):
|
||||
def __init__(self, infer_state, parent_value, class_value, var_args):
|
||||
def __init__(self, infer_state, parent_context, class_value, var_args):
|
||||
self._original_var_args = var_args
|
||||
super(CompiledInstance, self).__init__(infer_state, parent_value, class_value, var_args)
|
||||
super(CompiledInstance, self).__init__(infer_state, parent_context, class_value, var_args)
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
@@ -258,16 +258,16 @@ class CompiledInstance(AbstractInstanceValue):
|
||||
|
||||
|
||||
class TreeInstance(AbstractInstanceValue):
|
||||
def __init__(self, infer_state, parent_value, class_value, var_args):
|
||||
def __init__(self, infer_state, parent_context, class_value, var_args):
|
||||
# I don't think that dynamic append lookups should happen here. That
|
||||
# sounds more like something that should go to py__iter__.
|
||||
if class_value.py__name__() in ['list', 'set'] \
|
||||
and parent_value.get_root_value() == infer_state.builtins_module:
|
||||
and parent_context.get_root_value() == infer_state.builtins_module:
|
||||
# compare the module path with the builtin name.
|
||||
if settings.dynamic_array_additions:
|
||||
var_args = iterable.get_dynamic_array_instance(self, var_args)
|
||||
|
||||
super(TreeInstance, self).__init__(infer_state, parent_value,
|
||||
super(TreeInstance, self).__init__(infer_state, parent_context,
|
||||
class_value, var_args)
|
||||
self.tree_node = class_value.tree_node
|
||||
|
||||
@@ -313,10 +313,10 @@ class TreeInstance(AbstractInstanceValue):
|
||||
|
||||
|
||||
class AnonymousInstance(TreeInstance):
|
||||
def __init__(self, infer_state, parent_value, class_value):
|
||||
def __init__(self, infer_state, parent_context, class_value):
|
||||
super(AnonymousInstance, self).__init__(
|
||||
infer_state,
|
||||
parent_value,
|
||||
parent_context,
|
||||
class_value,
|
||||
var_args=AnonymousInstanceArguments(self),
|
||||
)
|
||||
@@ -330,7 +330,7 @@ class CompiledInstanceName(compiled.CompiledName):
|
||||
def __init__(self, infer_state, instance, klass, name):
|
||||
super(CompiledInstanceName, self).__init__(
|
||||
infer_state,
|
||||
klass.parent_value,
|
||||
klass.parent_context,
|
||||
name.string_name
|
||||
)
|
||||
self._instance = instance
|
||||
@@ -419,7 +419,7 @@ class CompiledBoundMethod(ValueWrapper):
|
||||
|
||||
class SelfName(TreeNameDefinition):
|
||||
"""
|
||||
This name calculates the parent_value lazily.
|
||||
This name calculates the parent_context lazily.
|
||||
"""
|
||||
def __init__(self, instance, class_value, tree_name):
|
||||
self._instance = instance
|
||||
@@ -427,7 +427,7 @@ class SelfName(TreeNameDefinition):
|
||||
self.tree_name = tree_name
|
||||
|
||||
@property
|
||||
def parent_value(self):
|
||||
def parent_context(self):
|
||||
return self._instance.create_instance_value(self.class_value, self.tree_name)
|
||||
|
||||
|
||||
|
||||
@@ -113,8 +113,8 @@ class Generator(GeneratorBase):
|
||||
|
||||
class CompForValue(TreeValue):
|
||||
@classmethod
|
||||
def from_comp_for(cls, parent_value, comp_for):
|
||||
return cls(parent_value.infer_state, parent_value, comp_for)
|
||||
def from_comp_for(cls, parent_context, comp_for):
|
||||
return cls(parent_context.infer_state, parent_context, comp_for)
|
||||
|
||||
def get_filters(self, search_global=False, until_position=None, origin_scope=None):
|
||||
yield ParserTreeFilter(self.infer_state, self)
|
||||
@@ -158,27 +158,27 @@ def comprehension_from_atom(infer_state, value, atom):
|
||||
|
||||
class ComprehensionMixin(object):
|
||||
@infer_state_method_cache()
|
||||
def _get_comp_for_value(self, parent_value, comp_for):
|
||||
return CompForValue.from_comp_for(parent_value, comp_for)
|
||||
def _get_comp_for_value(self, parent_context, comp_for):
|
||||
return CompForValue.from_comp_for(parent_context, comp_for)
|
||||
|
||||
def _nested(self, comp_fors, parent_value=None):
|
||||
def _nested(self, comp_fors, parent_context=None):
|
||||
comp_for = comp_fors[0]
|
||||
|
||||
is_async = comp_for.parent.type == 'comp_for'
|
||||
|
||||
input_node = comp_for.children[3]
|
||||
parent_value = parent_value or self._defining_value
|
||||
input_types = parent_value.infer_node(input_node)
|
||||
parent_context = parent_context or self._defining_value
|
||||
input_types = parent_context.infer_node(input_node)
|
||||
# TODO: simulate await if self.is_async
|
||||
|
||||
cn = ValueualizedNode(parent_value, input_node)
|
||||
cn = ValueualizedNode(parent_context, input_node)
|
||||
iterated = input_types.iterate(cn, is_async=is_async)
|
||||
exprlist = comp_for.children[1]
|
||||
for i, lazy_value in enumerate(iterated):
|
||||
types = lazy_value.infer()
|
||||
dct = unpack_tuple_to_dict(parent_value, types, exprlist)
|
||||
dct = unpack_tuple_to_dict(parent_context, types, exprlist)
|
||||
value_ = self._get_comp_for_value(
|
||||
parent_value,
|
||||
parent_context,
|
||||
comp_for,
|
||||
)
|
||||
with predefine_names(value_, comp_for, dct):
|
||||
|
||||
@@ -63,8 +63,8 @@ def apply_py__get__(value, instance, class_value):
|
||||
|
||||
|
||||
class ClassName(TreeNameDefinition):
|
||||
def __init__(self, parent_value, tree_name, name_value, apply_decorators):
|
||||
super(ClassName, self).__init__(parent_value, tree_name)
|
||||
def __init__(self, parent_context, tree_name, name_value, apply_decorators):
|
||||
super(ClassName, self).__init__(parent_context, tree_name)
|
||||
self._name_value = name_value
|
||||
self._apply_decorators = apply_decorators
|
||||
|
||||
@@ -73,13 +73,13 @@ class ClassName(TreeNameDefinition):
|
||||
# We're using a different value to infer, so we cannot call super().
|
||||
from jedi.inference.syntax_tree import tree_name_to_values
|
||||
inferred = tree_name_to_values(
|
||||
self.parent_value.infer_state, self._name_value, self.tree_name)
|
||||
self.parent_context.infer_state, self._name_value, self.tree_name)
|
||||
|
||||
for result_value in inferred:
|
||||
if self._apply_decorators:
|
||||
for c in apply_py__get__(result_value,
|
||||
instance=None,
|
||||
class_value=self.parent_value):
|
||||
class_value=self.parent_context):
|
||||
yield c
|
||||
else:
|
||||
yield result_value
|
||||
@@ -95,7 +95,7 @@ class ClassFilter(ParserTreeFilter):
|
||||
def _convert_names(self, names):
|
||||
return [
|
||||
self.name_class(
|
||||
parent_value=self.value,
|
||||
parent_context=self.value,
|
||||
tree_name=name,
|
||||
name_value=self._node_value,
|
||||
apply_decorators=not self._is_instance,
|
||||
@@ -141,7 +141,7 @@ class ClassMixin(object):
|
||||
from jedi.inference.value import TreeInstance
|
||||
if arguments is None:
|
||||
arguments = ValuesArguments([])
|
||||
return ValueSet([TreeInstance(self.infer_state, self.parent_value, self, arguments)])
|
||||
return ValueSet([TreeInstance(self.infer_state, self.parent_context, self, arguments)])
|
||||
|
||||
def py__class__(self):
|
||||
return compiled.builtin_from_name(self.infer_state, u'type')
|
||||
@@ -252,7 +252,7 @@ class ClassValue(use_metaclass(CachedMetaClass, ClassMixin, FunctionAndClassBase
|
||||
continue # These are not relevant for this search.
|
||||
|
||||
from jedi.inference.gradual.annotation import find_unknown_type_vars
|
||||
for type_var in find_unknown_type_vars(self.parent_value, node):
|
||||
for type_var in find_unknown_type_vars(self.parent_context, node):
|
||||
if type_var not in found:
|
||||
# The order matters and it's therefore a list.
|
||||
found.append(type_var)
|
||||
@@ -262,7 +262,7 @@ class ClassValue(use_metaclass(CachedMetaClass, ClassMixin, FunctionAndClassBase
|
||||
arglist = self.tree_node.get_super_arglist()
|
||||
if arglist:
|
||||
from jedi.inference import arguments
|
||||
return arguments.TreeArguments(self.infer_state, self.parent_value, arglist)
|
||||
return arguments.TreeArguments(self.infer_state, self.parent_context, arglist)
|
||||
return None
|
||||
|
||||
@infer_state_method_cache(default=())
|
||||
@@ -274,7 +274,7 @@ class ClassValue(use_metaclass(CachedMetaClass, ClassMixin, FunctionAndClassBase
|
||||
return lst
|
||||
|
||||
if self.py__name__() == 'object' \
|
||||
and self.parent_value == self.infer_state.builtins_module:
|
||||
and self.parent_context == self.infer_state.builtins_module:
|
||||
return []
|
||||
return [LazyKnownValues(
|
||||
self.infer_state.builtins_module.py__getattribute__('object')
|
||||
|
||||
@@ -20,20 +20,20 @@ class _ModuleAttributeName(AbstractNameDefinition):
|
||||
api_type = u'instance'
|
||||
|
||||
def __init__(self, parent_module, string_name, string_value=None):
|
||||
self.parent_value = parent_module
|
||||
self.parent_context = parent_module
|
||||
self.string_name = string_name
|
||||
self._string_value = string_value
|
||||
|
||||
def infer(self):
|
||||
if self._string_value is not None:
|
||||
s = self._string_value
|
||||
if self.parent_value.infer_state.environment.version_info.major == 2 \
|
||||
if self.parent_context.infer_state.environment.version_info.major == 2 \
|
||||
and not isinstance(s, bytes):
|
||||
s = s.encode('utf-8')
|
||||
return ValueSet([
|
||||
create_simple_object(self.parent_value.infer_state, s)
|
||||
create_simple_object(self.parent_context.infer_state, s)
|
||||
])
|
||||
return compiled.get_string_value_set(self.parent_value.infer_state)
|
||||
return compiled.get_string_value_set(self.parent_context.infer_state)
|
||||
|
||||
|
||||
class ModuleName(ValueNameMixin, AbstractNameDefinition):
|
||||
@@ -189,12 +189,12 @@ class ModuleMixin(SubModuleDictMixin):
|
||||
|
||||
class ModuleValue(ModuleMixin, TreeValue):
|
||||
api_type = u'module'
|
||||
parent_value = None
|
||||
parent_context = None
|
||||
|
||||
def __init__(self, infer_state, module_node, file_io, string_names, code_lines, is_package=False):
|
||||
super(ModuleValue, self).__init__(
|
||||
infer_state,
|
||||
parent_value=None,
|
||||
parent_context=None,
|
||||
tree_node=module_node
|
||||
)
|
||||
self.file_io = file_io
|
||||
|
||||
@@ -23,10 +23,10 @@ class ImplicitNamespaceValue(Value, SubModuleDictMixin):
|
||||
# folder foobar it will be available as an object:
|
||||
# <module 'foobar' (namespace)>.
|
||||
api_type = u'module'
|
||||
parent_value = None
|
||||
parent_context = None
|
||||
|
||||
def __init__(self, infer_state, fullname, paths):
|
||||
super(ImplicitNamespaceValue, self).__init__(infer_state, parent_value=None)
|
||||
super(ImplicitNamespaceValue, self).__init__(infer_state, parent_context=None)
|
||||
self.infer_state = infer_state
|
||||
self._fullname = fullname
|
||||
self._paths = paths
|
||||
|
||||
Reference in New Issue
Block a user