diff --git a/jedi/evaluate/base_context.py b/jedi/evaluate/base_context.py index 48d97b02..eb7560e7 100644 --- a/jedi/evaluate/base_context.py +++ b/jedi/evaluate/base_context.py @@ -14,7 +14,7 @@ from jedi import debug from jedi._compatibility import zip_longest, unicode from jedi.parser_utils import clean_scope_docstring from jedi.common import BaseContextSet, BaseContext -from jedi.evaluate.helpers import SimpleGetItemNotFound, execute_evaluated +from jedi.evaluate.helpers import SimpleGetItemNotFound from jedi.evaluate.utils import safe_property from jedi.evaluate.cache import evaluator_as_method_param_cache from jedi.cache import memoize_method @@ -39,7 +39,9 @@ class HelperContextMixin(object): return self.evaluator.execute(self, arguments=arguments) def execute_evaluated(self, *value_list): - return execute_evaluated(self, *value_list) + from jedi.evaluate.arguments import ValuesArguments + arguments = ValuesArguments([ContextSet([value]) for value in value_list]) + return self.evaluator.execute(self, arguments) def execute_annotation(self): return self.execute_evaluated() @@ -396,7 +398,7 @@ class ContextSet(BaseContextSet): 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) + return ContextSet.from_sets(c.execute_evaluated(*args, **kwargs) for c in self._set) def py__getattribute__(self, *args, **kwargs): if kwargs.get('is_goto'): diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index cb59f195..6ba11dca 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -2,7 +2,6 @@ from jedi._compatibility import unicode from jedi.evaluate.compiled.context import CompiledObject, CompiledName, \ CompiledObjectFilter, CompiledContextName, create_from_access_path from jedi.evaluate.base_context import ContextWrapper -from jedi.evaluate.helpers import execute_evaluated def builtin_from_name(evaluator, string): @@ -47,7 +46,7 @@ def create_simple_object(evaluator, obj): def get_string_context_set(evaluator): - return execute_evaluated(builtin_from_name(evaluator, u'str')) + return builtin_from_name(evaluator, u'str').execute_evaluated() def load_module(evaluator, dotted_name, **kwargs): diff --git a/jedi/evaluate/compiled/context.py b/jedi/evaluate/compiled/context.py index f5737336..bd9f0d19 100644 --- a/jedi/evaluate/compiled/context.py +++ b/jedi/evaluate/compiled/context.py @@ -15,7 +15,7 @@ from jedi.evaluate.base_context import Context, ContextSet, NO_CONTEXTS from jedi.evaluate.lazy_context import LazyKnownContext from jedi.evaluate.compiled.access import _sentinel from jedi.evaluate.cache import evaluator_function_cache -from jedi.evaluate.helpers import reraise_getitem_errors, execute_evaluated +from jedi.evaluate.helpers import reraise_getitem_errors from jedi.evaluate.signature import BuiltinSignature @@ -318,7 +318,7 @@ class SignatureParamName(AbstractNameDefinition, ParamNameInterface): contexts = ContextSet([create_from_access_path(evaluator, p.default)]) if p.has_annotation: annotation = create_from_access_path(evaluator, p.annotation) - contexts |= execute_evaluated(annotation) + contexts |= annotation.execute_evaluated() return contexts diff --git a/jedi/evaluate/context/iterable.py b/jedi/evaluate/context/iterable.py index 6d5c98d4..3738720e 100644 --- a/jedi/evaluate/context/iterable.py +++ b/jedi/evaluate/context/iterable.py @@ -33,7 +33,6 @@ from jedi.evaluate.helpers import get_int_or_none, is_string, \ SimpleGetItemNotFound from jedi.evaluate.utils import safe_property, to_list from jedi.evaluate.cache import evaluator_method_cache -from jedi.evaluate.helpers import execute_evaluated from jedi.evaluate.filters import ParserTreeFilter, LazyAttributeOverwrite, \ publish_method from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, \ @@ -772,7 +771,7 @@ class Slice(object): def __getattr__(self, name): if self._slice_object is None: context = compiled.builtin_from_name(self._context.evaluator, 'slice') - self._slice_object, = execute_evaluated(context) + self._slice_object, = context.execute_evaluated() return getattr(self._slice_object, name) @property diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index 264b7815..78d2a7fd 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -236,17 +236,6 @@ def reraise_getitem_errors(*exception_classes): raise SimpleGetItemNotFound(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) - - def parse_dotted_names(nodes, is_import_from, until_node=None): level = 0 names = [] diff --git a/jedi/evaluate/syntax_tree.py b/jedi/evaluate/syntax_tree.py index e8e1dca7..99a5786b 100644 --- a/jedi/evaluate/syntax_tree.py +++ b/jedi/evaluate/syntax_tree.py @@ -389,7 +389,7 @@ def _literals_to_types(evaluator, result): # Literals are only valid as long as the operations are # correct. Otherwise add a value-free instance. cls = compiled.builtin_from_name(evaluator, typ.name.string_name) - new_result |= helpers.execute_evaluated(cls) + new_result |= cls.execute_evaluated() else: new_result |= ContextSet([typ]) return new_result diff --git a/test/test_evaluate/test_compiled.py b/test/test_evaluate/test_compiled.py index a088bcca..00bda1ee 100644 --- a/test/test_evaluate/test_compiled.py +++ b/test/test_evaluate/test_compiled.py @@ -8,14 +8,13 @@ import pytest from jedi.evaluate import compiled from jedi.evaluate.compiled.access import DirectObjectAccess -from jedi.evaluate.helpers import execute_evaluated from jedi.evaluate.gradual.conversion import _stub_to_python_context_set def test_simple(evaluator, environment): obj = compiled.create_simple_object(evaluator, u'_str_') upper, = obj.py__getattribute__(u'upper') - objs = list(execute_evaluated(upper)) + objs = list(upper.execute_evaluated()) assert len(objs) == 1 if environment.version_info.major == 2: expected = 'unicode' diff --git a/test/test_evaluate/test_representation.py b/test/test_evaluate/test_representation.py index 11b528d3..61130230 100644 --- a/test/test_evaluate/test_representation.py +++ b/test/test_evaluate/test_representation.py @@ -1,7 +1,5 @@ from textwrap import dedent -from jedi.evaluate.helpers import execute_evaluated - def get_definition_and_evaluator(Script, source): first, = Script(dedent(source)).goto_definitions() @@ -22,8 +20,8 @@ def test_function_execution(Script): # Now just use the internals of the result (easiest way to get a fully # usable function). # Should return the same result both times. - assert len(execute_evaluated(func)) == 1 - assert len(execute_evaluated(func)) == 1 + assert len(func.execute_evaluated()) == 1 + assert len(func.execute_evaluated()) == 1 def test_class_mro(Script):