forked from VimPlug/jedi
Move execute_evaluated to a helper function
This commit is contained in:
@@ -13,7 +13,7 @@ from jedi._compatibility import Python3Method, zip_longest, unicode
|
|||||||
from jedi.parser_utils import clean_scope_docstring, get_doc_with_call_signature
|
from jedi.parser_utils import clean_scope_docstring, get_doc_with_call_signature
|
||||||
from jedi.common import BaseContextSet, BaseContext
|
from jedi.common import BaseContextSet, BaseContext
|
||||||
from jedi.evaluate.helpers import EvaluatorIndexError, EvaluatorTypeError, \
|
from jedi.evaluate.helpers import EvaluatorIndexError, EvaluatorTypeError, \
|
||||||
EvaluatorKeyError
|
EvaluatorKeyError, execute_evaluated
|
||||||
|
|
||||||
|
|
||||||
class Context(BaseContext):
|
class Context(BaseContext):
|
||||||
@@ -33,15 +33,6 @@ class Context(BaseContext):
|
|||||||
# overwritten.
|
# overwritten.
|
||||||
return self.__class__.__name__.lower()
|
return self.__class__.__name__.lower()
|
||||||
|
|
||||||
def execute_evaluated(self, *value_list):
|
|
||||||
"""
|
|
||||||
Execute a function with already executed arguments.
|
|
||||||
"""
|
|
||||||
# TODO move this out of here to the evaluator.
|
|
||||||
from jedi.evaluate.arguments import ValuesArguments
|
|
||||||
arguments = ValuesArguments([ContextSet(value) for value in value_list])
|
|
||||||
return self.evaluator.execute(self, arguments)
|
|
||||||
|
|
||||||
def iterate(self, contextualized_node=None, is_async=False):
|
def iterate(self, contextualized_node=None, is_async=False):
|
||||||
debug.dbg('iterate %s', self)
|
debug.dbg('iterate %s', self)
|
||||||
try:
|
try:
|
||||||
@@ -240,6 +231,9 @@ class ContextSet(BaseContextSet):
|
|||||||
def execute(self, arguments):
|
def execute(self, arguments):
|
||||||
return ContextSet.from_sets(c.evaluator.execute(c, arguments) for c in self._set)
|
return ContextSet.from_sets(c.evaluator.execute(c, arguments) for c in self._set)
|
||||||
|
|
||||||
|
def execute_evaluated(self, *args, **kwargs):
|
||||||
|
return ContextSet.from_sets(execute_evaluated(c, *args, **kwargs) for c in self._set)
|
||||||
|
|
||||||
|
|
||||||
NO_CONTEXTS = ContextSet()
|
NO_CONTEXTS = ContextSet()
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ from jedi._compatibility import unicode
|
|||||||
from jedi.evaluate.compiled.context import CompiledObject, CompiledName, \
|
from jedi.evaluate.compiled.context import CompiledObject, CompiledName, \
|
||||||
CompiledObjectFilter, CompiledContextName, create_from_access_path, \
|
CompiledObjectFilter, CompiledContextName, create_from_access_path, \
|
||||||
create_from_name
|
create_from_name
|
||||||
|
from jedi.evaluate.helpers import execute_evaluated
|
||||||
|
|
||||||
|
|
||||||
def builtin_from_name(evaluator, string):
|
def builtin_from_name(evaluator, string):
|
||||||
@@ -29,7 +30,7 @@ def get_special_object(evaluator, identifier):
|
|||||||
|
|
||||||
|
|
||||||
def get_string_context_set(evaluator):
|
def get_string_context_set(evaluator):
|
||||||
return builtin_from_name(evaluator, u'str').execute_evaluated()
|
return execute_evaluated(builtin_from_name(evaluator, u'str'))
|
||||||
|
|
||||||
|
|
||||||
def load_module(evaluator, **kwargs):
|
def load_module(evaluator, **kwargs):
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from jedi.evaluate.base_context import Context, ContextSet
|
|||||||
from jedi.evaluate.lazy_context import LazyKnownContext
|
from jedi.evaluate.lazy_context import LazyKnownContext
|
||||||
from jedi.evaluate.compiled.access import _sentinel
|
from jedi.evaluate.compiled.access import _sentinel
|
||||||
from jedi.evaluate.cache import evaluator_function_cache
|
from jedi.evaluate.cache import evaluator_function_cache
|
||||||
from jedi.evaluate.helpers import reraise_as_evaluator
|
from jedi.evaluate.helpers import reraise_as_evaluator, execute_evaluated
|
||||||
from . import fake
|
from . import fake
|
||||||
|
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ class SignatureParamName(AbstractNameDefinition):
|
|||||||
contexts = ContextSet(create_from_access_path(evaluator, p.default))
|
contexts = ContextSet(create_from_access_path(evaluator, p.default))
|
||||||
if p.has_annotation:
|
if p.has_annotation:
|
||||||
annotation = create_from_access_path(evaluator, p.annotation)
|
annotation = create_from_access_path(evaluator, p.annotation)
|
||||||
contexts |= annotation.execute_evaluated()
|
contexts |= execute_evaluated(annotation)
|
||||||
return contexts
|
return contexts
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from jedi.evaluate import imports
|
|||||||
from jedi.evaluate.base_context import Context, ContextSet
|
from jedi.evaluate.base_context import Context, ContextSet
|
||||||
from jedi.evaluate.context import ModuleContext
|
from jedi.evaluate.context import ModuleContext
|
||||||
from jedi.evaluate.cache import evaluator_function_cache
|
from jedi.evaluate.cache import evaluator_function_cache
|
||||||
|
from jedi.evaluate.helpers import execute_evaluated
|
||||||
from jedi.evaluate.compiled.getattr_static import getattr_static
|
from jedi.evaluate.compiled.getattr_static import getattr_static
|
||||||
from jedi.evaluate.compiled.access import compiled_objects_cache
|
from jedi.evaluate.compiled.access import compiled_objects_cache
|
||||||
from jedi.evaluate.compiled.context import create_cached_compiled_object
|
from jedi.evaluate.compiled.context import create_cached_compiled_object
|
||||||
@@ -220,7 +221,7 @@ def _create(evaluator, access_handle, parent_context, *args):
|
|||||||
if tree_node.type == 'classdef':
|
if tree_node.type == 'classdef':
|
||||||
if not access_handle.is_class():
|
if not access_handle.is_class():
|
||||||
# Is an instance, not a class.
|
# Is an instance, not a class.
|
||||||
tree_context, = tree_context.execute_evaluated()
|
tree_context, = execute_evaluated(tree_context)
|
||||||
|
|
||||||
return MixedObject(
|
return MixedObject(
|
||||||
evaluator,
|
evaluator,
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ from jedi.evaluate.helpers import get_int_or_none, is_string, \
|
|||||||
from jedi.evaluate.utils import safe_property
|
from jedi.evaluate.utils import safe_property
|
||||||
from jedi.evaluate.utils import to_list
|
from jedi.evaluate.utils import to_list
|
||||||
from jedi.evaluate.cache import evaluator_method_cache
|
from jedi.evaluate.cache import evaluator_method_cache
|
||||||
|
from jedi.evaluate.helpers import execute_evaluated
|
||||||
from jedi.evaluate.filters import ParserTreeFilter, BuiltinOverwrite, \
|
from jedi.evaluate.filters import ParserTreeFilter, BuiltinOverwrite, \
|
||||||
publish_method
|
publish_method
|
||||||
from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, Context, \
|
from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, Context, \
|
||||||
@@ -188,7 +189,7 @@ class Sequence(BuiltinOverwrite, IterableMixin):
|
|||||||
@memoize_method
|
@memoize_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
compiled_obj = compiled.builtin_from_name(self.evaluator, self.array_type)
|
compiled_obj = compiled.builtin_from_name(self.evaluator, self.array_type)
|
||||||
only_obj, = compiled_obj.execute_evaluated(self)
|
only_obj, = execute_evaluated(compiled_obj, self)
|
||||||
return only_obj
|
return only_obj
|
||||||
|
|
||||||
def py__bool__(self):
|
def py__bool__(self):
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ from parso import parse, ParserSyntaxError
|
|||||||
from jedi._compatibility import u
|
from jedi._compatibility import u
|
||||||
from jedi.evaluate.utils import indent_block
|
from jedi.evaluate.utils import indent_block
|
||||||
from jedi.evaluate.cache import evaluator_method_cache
|
from jedi.evaluate.cache import evaluator_method_cache
|
||||||
|
from jedi.evaluate.helpers import execute_evaluated
|
||||||
from jedi.evaluate.base_context import iterator_to_context_set, ContextSet, \
|
from jedi.evaluate.base_context import iterator_to_context_set, ContextSet, \
|
||||||
NO_CONTEXTS
|
NO_CONTEXTS
|
||||||
from jedi.evaluate.lazy_context import LazyKnownContexts
|
from jedi.evaluate.lazy_context import LazyKnownContexts
|
||||||
@@ -261,7 +262,7 @@ def _execute_array_values(evaluator, array):
|
|||||||
values.append(LazyKnownContexts(objects))
|
values.append(LazyKnownContexts(objects))
|
||||||
return {FakeSequence(evaluator, array.array_type, values)}
|
return {FakeSequence(evaluator, array.array_type, values)}
|
||||||
else:
|
else:
|
||||||
return array.execute_evaluated()
|
return execute_evaluated(array)
|
||||||
|
|
||||||
|
|
||||||
@evaluator_method_cache()
|
@evaluator_method_cache()
|
||||||
|
|||||||
@@ -271,8 +271,7 @@ def _check_isinstance_type(context, element, search_name):
|
|||||||
for cls_or_tup in lazy_context_cls.infer():
|
for cls_or_tup in lazy_context_cls.infer():
|
||||||
if isinstance(cls_or_tup, iterable.Sequence) and cls_or_tup.array_type == 'tuple':
|
if isinstance(cls_or_tup, iterable.Sequence) and cls_or_tup.array_type == 'tuple':
|
||||||
for lazy_context in cls_or_tup.py__iter__():
|
for lazy_context in cls_or_tup.py__iter__():
|
||||||
for context in lazy_context.infer():
|
context_set |= lazy_context.infer().execute_evaluated(context)
|
||||||
context_set |= context.execute_evaluated()
|
|
||||||
else:
|
else:
|
||||||
context_set |= cls_or_tup.execute_evaluated()
|
context_set |= helpers.execute_evaluated(cls_or_tup)
|
||||||
return context_set
|
return context_set
|
||||||
|
|||||||
@@ -237,3 +237,14 @@ def reraise_as_evaluator(*exception_classes):
|
|||||||
except exception_classes as e:
|
except exception_classes as e:
|
||||||
new_exc_cls = globals()['Evaluator' + e.__class__.__name__]
|
new_exc_cls = globals()['Evaluator' + e.__class__.__name__]
|
||||||
raise new_exc_cls(e)
|
raise new_exc_cls(e)
|
||||||
|
|
||||||
|
|
||||||
|
def execute_evaluated(context, *value_list):
|
||||||
|
"""
|
||||||
|
Execute a function with already executed arguments.
|
||||||
|
"""
|
||||||
|
# TODO move this out of here to the evaluator.
|
||||||
|
from jedi.evaluate.arguments import ValuesArguments
|
||||||
|
from jedi.evaluate.base_context import ContextSet
|
||||||
|
arguments = ValuesArguments([ContextSet(value) for value in value_list])
|
||||||
|
return context.evaluator.execute(context, arguments)
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ from jedi.evaluate import compiled
|
|||||||
from jedi.evaluate.base_context import NO_CONTEXTS, ContextSet
|
from jedi.evaluate.base_context import NO_CONTEXTS, ContextSet
|
||||||
from jedi.evaluate.lazy_context import LazyTreeContext
|
from jedi.evaluate.lazy_context import LazyTreeContext
|
||||||
from jedi.evaluate.context import ModuleContext
|
from jedi.evaluate.context import ModuleContext
|
||||||
from jedi.evaluate.helpers import is_string
|
from jedi.evaluate.helpers import is_string, execute_evaluated
|
||||||
from jedi import debug
|
from jedi import debug
|
||||||
from jedi import parser_utils
|
from jedi import parser_utils
|
||||||
|
|
||||||
@@ -296,7 +296,7 @@ def py__getitem__(context, typ, node):
|
|||||||
[LazyTreeContext(context, n) for n in nodes]
|
[LazyTreeContext(context, n) for n in nodes]
|
||||||
)
|
)
|
||||||
|
|
||||||
result = factory.execute_evaluated(compiled_classname, args)
|
result = execute_evaluated(factory, compiled_classname, args)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -393,7 +393,7 @@ def _literals_to_types(evaluator, result):
|
|||||||
# Literals are only valid as long as the operations are
|
# Literals are only valid as long as the operations are
|
||||||
# correct. Otherwise add a value-free instance.
|
# correct. Otherwise add a value-free instance.
|
||||||
cls = compiled.builtin_from_name(evaluator, typ.name.string_name)
|
cls = compiled.builtin_from_name(evaluator, typ.name.string_name)
|
||||||
new_result |= cls.execute_evaluated()
|
new_result |= helpers.execute_evaluated(cls)
|
||||||
else:
|
else:
|
||||||
new_result |= ContextSet(typ)
|
new_result |= ContextSet(typ)
|
||||||
return new_result
|
return new_result
|
||||||
|
|||||||
Reference in New Issue
Block a user