1
0
forked from VimPlug/jedi

compiled_object -> compiled_value

This commit is contained in:
Dave Halter
2020-01-25 18:25:19 +01:00
parent 7c3dbef9c5
commit f42ab8872d
6 changed files with 61 additions and 61 deletions

View File

@@ -24,9 +24,9 @@ class MixedModuleContext(ModuleContext):
super(MixedModuleContext, self).__init__(tree_module_value) super(MixedModuleContext, self).__init__(tree_module_value)
self._namespace_objects = [NamespaceObject(n) for n in namespaces] self._namespace_objects = [NamespaceObject(n) for n in namespaces]
def _get_mixed_object(self, compiled_object): def _get_mixed_object(self, compiled_value):
return mixed.MixedObject( return mixed.MixedObject(
compiled_object=compiled_object, compiled_value=compiled_value,
tree_value=self._value tree_value=self._value
) )
@@ -35,7 +35,7 @@ class MixedModuleContext(ModuleContext):
yield filter yield filter
for namespace_obj in self._namespace_objects: for namespace_obj in self._namespace_objects:
compiled_object = _create(self.inference_state, namespace_obj) compiled_value = _create(self.inference_state, namespace_obj)
mixed_object = self._get_mixed_object(compiled_object) mixed_object = self._get_mixed_object(compiled_value)
for filter in mixed_object.get_filters(*args, **kwargs): for filter in mixed_object.get_filters(*args, **kwargs):
yield filter yield filter

View File

@@ -21,23 +21,23 @@ class ExactValue(LazyValueWrapper):
This class represents exact values, that makes operations like additions This class represents exact values, that makes operations like additions
and exact boolean values possible, while still being a "normal" stub. and exact boolean values possible, while still being a "normal" stub.
""" """
def __init__(self, compiled_obj): def __init__(self, compiled_value):
self.inference_state = compiled_obj.inference_state self.inference_state = compiled_value.inference_state
self._compiled_obj = compiled_obj self._compiled_value = compiled_value
def __getattribute__(self, name): def __getattribute__(self, name):
if name in ('get_safe_value', 'execute_operation', 'access_handle', if name in ('get_safe_value', 'execute_operation', 'access_handle',
'negate', 'py__bool__', 'is_compiled'): 'negate', 'py__bool__', 'is_compiled'):
return getattr(self._compiled_obj, name) return getattr(self._compiled_value, name)
return super(ExactValue, self).__getattribute__(name) return super(ExactValue, self).__getattribute__(name)
def _get_wrapped_value(self): def _get_wrapped_value(self):
instance, = builtin_from_name( instance, = builtin_from_name(
self.inference_state, self._compiled_obj.name.string_name).execute_with_values() self.inference_state, self._compiled_value.name.string_name).execute_with_values()
return instance return instance
def __repr__(self): def __repr__(self):
return '<%s: %s>' % (self.__class__.__name__, self._compiled_obj) return '<%s: %s>' % (self.__class__.__name__, self._compiled_value)
def create_simple_object(inference_state, obj): def create_simple_object(inference_state, obj):
@@ -46,11 +46,11 @@ def create_simple_object(inference_state, obj):
versions. versions.
""" """
assert type(obj) in (int, float, str, bytes, unicode, slice, complex, bool), obj assert type(obj) in (int, float, str, bytes, unicode, slice, complex, bool), obj
compiled_obj = create_from_access_path( compiled_value = create_from_access_path(
inference_state, inference_state,
inference_state.compiled_subprocess.create_simple_object(obj) inference_state.compiled_subprocess.create_simple_object(obj)
) )
return ExactValue(compiled_obj) return ExactValue(compiled_value)
def get_string_value_set(inference_state): def get_string_value_set(inference_state):

View File

@@ -43,19 +43,19 @@ class MixedObject(ValueWrapper):
fewer special cases, because we in Python you don't have the same freedoms fewer special cases, because we in Python you don't have the same freedoms
to modify the runtime. to modify the runtime.
""" """
def __init__(self, compiled_object, tree_value): def __init__(self, compiled_value, tree_value):
super(MixedObject, self).__init__(tree_value) super(MixedObject, self).__init__(tree_value)
self.compiled_object = compiled_object self.compiled_value = compiled_value
self.access_handle = compiled_object.access_handle self.access_handle = compiled_value.access_handle
def get_filters(self, *args, **kwargs): def get_filters(self, *args, **kwargs):
yield MixedObjectFilter( yield MixedObjectFilter(
self.inference_state, self.compiled_object, self._wrapped_value) self.inference_state, self.compiled_value, self._wrapped_value)
def get_signatures(self): def get_signatures(self):
# Prefer `inspect.signature` over somehow analyzing Python code. It # Prefer `inspect.signature` over somehow analyzing Python code. It
# should be very precise, especially for stuff like `partial`. # should be very precise, especially for stuff like `partial`.
return self.compiled_object.get_signatures() return self.compiled_value.get_signatures()
@inference_state_method_cache(default=NO_VALUES) @inference_state_method_cache(default=NO_VALUES)
def py__call__(self, arguments): def py__call__(self, arguments):
@@ -67,14 +67,14 @@ class MixedObject(ValueWrapper):
def get_safe_value(self, default=_sentinel): def get_safe_value(self, default=_sentinel):
if default is _sentinel: if default is _sentinel:
return self.compiled_object.get_safe_value() return self.compiled_value.get_safe_value()
else: else:
return self.compiled_object.get_safe_value(default) return self.compiled_value.get_safe_value(default)
def py__simple_getitem__(self, index): def py__simple_getitem__(self, index):
python_object = self.compiled_object.access_handle.access._obj python_object = self.compiled_value.access_handle.access._obj
if type(python_object) in ALLOWED_GETITEM_TYPES: if type(python_object) in ALLOWED_GETITEM_TYPES:
return self.compiled_object.py__simple_getitem__(index) return self.compiled_value.py__simple_getitem__(index)
return self._wrapped_value.py__simple_getitem__(index) return self._wrapped_value.py__simple_getitem__(index)
def _as_context(self): def _as_context(self):
@@ -92,8 +92,8 @@ class MixedObject(ValueWrapper):
class MixedContext(CompiledContext, TreeContextMixin): class MixedContext(CompiledContext, TreeContextMixin):
@property @property
def compiled_object(self): def compiled_value(self):
return self._value.compiled_object return self._value.compiled_value
class MixedModuleContext(CompiledModuleContext, MixedContext): class MixedModuleContext(CompiledModuleContext, MixedContext):
@@ -102,7 +102,7 @@ class MixedModuleContext(CompiledModuleContext, MixedContext):
class MixedName(NameWrapper): class MixedName(NameWrapper):
""" """
The ``CompiledName._compiled_object`` is our MixedObject. The ``CompiledName._compiled_value`` is our MixedObject.
""" """
def __init__(self, wrapped_name, parent_tree_value): def __init__(self, wrapped_name, parent_tree_value):
super(MixedName, self).__init__(wrapped_name) super(MixedName, self).__init__(wrapped_name)
@@ -118,20 +118,20 @@ class MixedName(NameWrapper):
@memoize_method @memoize_method
def infer(self): def infer(self):
compiled_object = self._wrapped_name.infer_compiled_object() compiled_value = self._wrapped_name.infer_compiled_value()
tree_value = self._parent_tree_value tree_value = self._parent_tree_value
if tree_value.is_instance() or tree_value.is_class(): if tree_value.is_instance() or tree_value.is_class():
tree_values = tree_value.py__getattribute__(self.string_name) tree_values = tree_value.py__getattribute__(self.string_name)
if compiled_object.is_function(): if compiled_value.is_function():
return ValueSet({MixedObject(compiled_object, v) for v in tree_values}) return ValueSet({MixedObject(compiled_value, v) for v in tree_values})
module_context = tree_value.get_root_context() module_context = tree_value.get_root_context()
return _create(self._inference_state, compiled_object, module_context) return _create(self._inference_state, compiled_value, module_context)
class MixedObjectFilter(compiled.CompiledValueFilter): class MixedObjectFilter(compiled.CompiledValueFilter):
def __init__(self, inference_state, compiled_object, tree_value): def __init__(self, inference_state, compiled_value, tree_value):
super(MixedObjectFilter, self).__init__(inference_state, compiled_object) super(MixedObjectFilter, self).__init__(inference_state, compiled_value)
self._tree_value = tree_value self._tree_value = tree_value
def _create_name(self, name): def _create_name(self, name):
@@ -250,33 +250,33 @@ def _find_syntax_node_name(inference_state, python_object):
@inference_state_function_cache() @inference_state_function_cache()
def _create(inference_state, compiled_object, module_context): def _create(inference_state, compiled_value, module_context):
# TODO accessing this is bad, but it probably doesn't matter that much, # TODO accessing this is bad, but it probably doesn't matter that much,
# because we're working with interpreteters only here. # because we're working with interpreteters only here.
python_object = compiled_object.access_handle.access._obj python_object = compiled_value.access_handle.access._obj
result = _find_syntax_node_name(inference_state, python_object) result = _find_syntax_node_name(inference_state, python_object)
if result is None: if result is None:
# TODO Care about generics from stuff like `[1]` and don't return like this. # TODO Care about generics from stuff like `[1]` and don't return like this.
if type(python_object) in (dict, list, tuple): if type(python_object) in (dict, list, tuple):
return ValueSet({compiled_object}) return ValueSet({compiled_value})
tree_values = to_stub(compiled_object) tree_values = to_stub(compiled_value)
if not tree_values: if not tree_values:
return ValueSet({compiled_object}) return ValueSet({compiled_value})
else: else:
module_node, tree_node, file_io, code_lines = result module_node, tree_node, file_io, code_lines = result
if module_context is None or module_context.tree_node != module_node: if module_context is None or module_context.tree_node != module_node:
root_compiled_object = compiled_object.get_root_context().get_value() root_compiled_value = compiled_value.get_root_context().get_value()
# TODO this __name__ might be wrong. # TODO this __name__ might be wrong.
name = root_compiled_object.py__name__() name = root_compiled_value.py__name__()
string_names = tuple(name.split('.')) string_names = tuple(name.split('.'))
module_value = ModuleValue( module_value = ModuleValue(
inference_state, module_node, inference_state, module_node,
file_io=file_io, file_io=file_io,
string_names=string_names, string_names=string_names,
code_lines=code_lines, code_lines=code_lines,
is_package=root_compiled_object.is_package(), is_package=root_compiled_value.is_package(),
) )
if name is not None: if name is not None:
inference_state.module_cache.add(string_names, ValueSet([module_value])) inference_state.module_cache.add(string_names, ValueSet([module_value]))
@@ -284,11 +284,11 @@ def _create(inference_state, compiled_object, module_context):
tree_values = ValueSet({module_context.create_value(tree_node)}) tree_values = ValueSet({module_context.create_value(tree_node)})
if tree_node.type == 'classdef': if tree_node.type == 'classdef':
if not compiled_object.is_class(): if not compiled_value.is_class():
# Is an instance, not a class. # Is an instance, not a class.
tree_values = tree_values.execute_with_values() tree_values = tree_values.execute_with_values()
return ValueSet( return ValueSet(
MixedObject(compiled_object, tree_value=tree_value) MixedObject(compiled_value, tree_value=tree_value)
for tree_value in tree_values for tree_value in tree_values
) )

View File

@@ -354,15 +354,15 @@ class CompiledName(AbstractNameDefinition):
@memoize_method @memoize_method
def infer(self): def infer(self):
return ValueSet([self.infer_compiled_object()]) return ValueSet([self.infer_compiled_value()])
def infer_compiled_object(self): def infer_compiled_value(self):
return create_from_name(self._inference_state, self._parent_value, self.string_name) return create_from_name(self._inference_state, self._parent_value, self.string_name)
class SignatureParamName(ParamNameInterface, AbstractNameDefinition): class SignatureParamName(ParamNameInterface, AbstractNameDefinition):
def __init__(self, compiled_obj, signature_param): def __init__(self, compiled_value, signature_param):
self.parent_context = compiled_obj.parent_context self.parent_context = compiled_value.parent_context
self._signature_param = signature_param self._signature_param = signature_param
@property @property
@@ -393,8 +393,8 @@ class SignatureParamName(ParamNameInterface, AbstractNameDefinition):
class UnresolvableParamName(ParamNameInterface, AbstractNameDefinition): class UnresolvableParamName(ParamNameInterface, AbstractNameDefinition):
def __init__(self, compiled_obj, name, default): def __init__(self, compiled_value, name, default):
self.parent_context = compiled_obj.parent_context self.parent_context = compiled_value.parent_context
self.string_name = name self.string_name = name
self._default = default self._default = default
@@ -433,13 +433,13 @@ class EmptyCompiledName(AbstractNameDefinition):
class CompiledValueFilter(AbstractFilter): class CompiledValueFilter(AbstractFilter):
def __init__(self, inference_state, compiled_object, is_instance=False): def __init__(self, inference_state, compiled_value, is_instance=False):
self._inference_state = inference_state self._inference_state = inference_state
self.compiled_object = compiled_object self.compiled_value = compiled_value
self.is_instance = is_instance self.is_instance = is_instance
def get(self, name): def get(self, name):
access_handle = self.compiled_object.access_handle access_handle = self.compiled_value.access_handle
return self._get( return self._get(
name, name,
lambda name, unsafe: access_handle.is_allowed_getattr(name, unsafe), lambda name, unsafe: access_handle.is_allowed_getattr(name, unsafe),
@@ -482,7 +482,7 @@ class CompiledValueFilter(AbstractFilter):
def values(self): def values(self):
from jedi.inference.compiled import builtin_from_name from jedi.inference.compiled import builtin_from_name
names = [] names = []
needs_type_completions, dir_infos = self.compiled_object.access_handle.get_dir_infos() needs_type_completions, dir_infos = self.compiled_value.access_handle.get_dir_infos()
# We could use `unsafe` here as well, especially as a parameter to # We could use `unsafe` here as well, especially as a parameter to
# get_dir_infos. But this would lead to a lot of property executions # get_dir_infos. But this would lead to a lot of property executions
# that are probably not wanted. The drawback for this is that we # that are probably not wanted. The drawback for this is that we
@@ -504,12 +504,12 @@ class CompiledValueFilter(AbstractFilter):
def _create_name(self, name): def _create_name(self, name):
return CompiledName( return CompiledName(
self._inference_state, self._inference_state,
self.compiled_object, self.compiled_value,
name name
) )
def __repr__(self): def __repr__(self):
return "<%s: %s>" % (self.__class__.__name__, self.compiled_object) return "<%s: %s>" % (self.__class__.__name__, self.compiled_value)
docstr_defaults = { docstr_defaults = {
@@ -582,15 +582,15 @@ def _parse_function_doc(doc):
return param_str, ret return param_str, ret
def create_from_name(inference_state, compiled_object, name): def create_from_name(inference_state, compiled_value, name):
access_paths = compiled_object.access_handle.getattr_paths(name, default=None) access_paths = compiled_value.access_handle.getattr_paths(name, default=None)
parent_context = compiled_object parent_context = compiled_value
if parent_context.is_class(): if parent_context.is_class():
parent_context = parent_context.parent_context parent_context = parent_context.parent_context
value = None value = None
for access_path in access_paths: for access_path in access_paths:
value = create_cached_compiled_object( value = create_cached_compiled_value(
inference_state, inference_state,
access_path, access_path,
parent_context=None if value is None else value.as_context(), parent_context=None if value is None else value.as_context(),
@@ -608,7 +608,7 @@ def _normalize_create_args(func):
def create_from_access_path(inference_state, access_path): def create_from_access_path(inference_state, access_path):
value = None value = None
for name, access in access_path.accesses: for name, access in access_path.accesses:
value = create_cached_compiled_object( value = create_cached_compiled_value(
inference_state, inference_state,
access, access,
parent_context=None if value is None else value.as_context() parent_context=None if value is None else value.as_context()
@@ -618,7 +618,7 @@ def create_from_access_path(inference_state, access_path):
@_normalize_create_args @_normalize_create_args
@inference_state_function_cache() @inference_state_function_cache()
def create_cached_compiled_object(inference_state, access_handle, parent_context): def create_cached_compiled_value(inference_state, access_handle, parent_context):
assert not isinstance(parent_context, CompiledValue) assert not isinstance(parent_context, CompiledValue)
if parent_context is None: if parent_context is None:
cls = CompiledModule cls = CompiledModule

View File

@@ -432,7 +432,7 @@ class CompiledInstanceClassFilter(AbstractFilter):
return self._convert(self._class_filter.values()) return self._convert(self._class_filter.values())
def _convert(self, names): def _convert(self, names):
klass = self._class_filter.compiled_object klass = self._class_filter.compiled_value
return [ return [
CompiledInstanceName(self._instance.inference_state, self._instance, klass, n) CompiledInstanceName(self._instance.inference_state, self._instance, klass, n)
for n in names for n in names

View File

@@ -426,10 +426,10 @@ class DictLiteralValue(_DictMixin, SequenceLiteralValue, _DictKeyMixin):
def py__simple_getitem__(self, index): def py__simple_getitem__(self, index):
"""Here the index is an int/str. Raises IndexError/KeyError.""" """Here the index is an int/str. Raises IndexError/KeyError."""
compiled_obj_index = compiled.create_simple_object(self.inference_state, index) compiled_value_index = compiled.create_simple_object(self.inference_state, index)
for key, value in self.get_tree_entries(): for key, value in self.get_tree_entries():
for k in self._defining_context.infer_node(key): for k in self._defining_context.infer_node(key):
for key_v in k.execute_operation(compiled_obj_index, u'=='): for key_v in k.execute_operation(compiled_value_index, u'=='):
if key_v.get_safe_value(): if key_v.get_safe_value():
return self._defining_context.infer_node(value) return self._defining_context.infer_node(value)
raise SimpleGetItemNotFound('No key found in dictionary %s.' % self) raise SimpleGetItemNotFound('No key found in dictionary %s.' % self)