diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index c03940fe..9e0719d6 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -33,7 +33,7 @@ from jedi.evaluate.sys_path import get_venv_path, dotted_path_in_sys_path from jedi.evaluate.iterable import unpack_tuple_to_dict from jedi.evaluate.filters import TreeNameDefinition from jedi.evaluate.syntax_tree import tree_name_to_contexts -from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.context import ModuleContext from jedi.evaluate.context.module import ModuleName # Jedi uses lots and lots of recursion. By setting this a little bit higher, we diff --git a/jedi/api/interpreter.py b/jedi/api/interpreter.py index 96507176..202f345e 100644 --- a/jedi/api/interpreter.py +++ b/jedi/api/interpreter.py @@ -2,10 +2,10 @@ TODO Some parts of this module are still not well documented. """ -from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.context import ModuleContext from jedi.evaluate import compiled from jedi.evaluate.compiled import mixed -from jedi.evaluate.context import Context +from jedi.evaluate.base_context import Context class NamespaceObject(object): diff --git a/jedi/api/usages.py b/jedi/api/usages.py index 4d119e3c..8b9af71c 100644 --- a/jedi/api/usages.py +++ b/jedi/api/usages.py @@ -2,7 +2,7 @@ from jedi.api import classes from parso.python import tree from jedi.evaluate import imports from jedi.evaluate.filters import TreeNameDefinition -from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.context import ModuleContext def compare_contexts(c1, c2): diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index c0bebe96..54be1fbd 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -78,7 +78,7 @@ from jedi.evaluate import compiled from jedi.evaluate import helpers from jedi.evaluate.filters import TreeNameDefinition, ParamName from jedi.evaluate.context.instance import AnonymousInstance, BoundMethod -from jedi.evaluate.context import ContextualizedName, ContextualizedNode, \ +from jedi.evaluate.base_context import ContextualizedName, ContextualizedNode, \ ContextSet, NO_CONTEXTS, iterate_contexts from jedi.evaluate.context.function import FunctionContext from jedi.evaluate.syntax_tree import eval_trailer, eval_expr_stmt, \ diff --git a/jedi/evaluate/analysis.py b/jedi/evaluate/analysis.py index b4f82d61..d5750060 100644 --- a/jedi/evaluate/analysis.py +++ b/jedi/evaluate/analysis.py @@ -92,7 +92,7 @@ def _check_for_setattr(instance): """ Check if there's any setattr method inside an instance. If so, return True. """ - from jedi.evaluate.context.module import ModuleContext + from jedi.evaluate.context import ModuleContext module = instance.get_root_context() if not isinstance(module, ModuleContext): return False diff --git a/jedi/evaluate/context/base.py b/jedi/evaluate/base_context.py similarity index 100% rename from jedi/evaluate/context/base.py rename to jedi/evaluate/base_context.py diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index dca1df34..d80334aa 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -13,7 +13,7 @@ from jedi import debug from jedi.cache import underscore_memoization, memoize_method from jedi.evaluate.filters import AbstractFilter, AbstractNameDefinition, \ ContextNameMixin -from jedi.evaluate.context import Context, LazyKnownContext, ContextSet +from jedi.evaluate.base_context import Context, ContextSet from jedi.evaluate.compiled.getattr_static import getattr_static from . import fake @@ -231,6 +231,7 @@ class CompiledObject(Context): # Get rid of side effects, we won't call custom `__getitem__`s. return + from jedi.evaluate.context import LazyKnownContext for i, part in enumerate(self.obj): if i > 20: # Should not go crazy with large iterators diff --git a/jedi/evaluate/compiled/mixed.py b/jedi/evaluate/compiled/mixed.py index dd2a07cf..ac0f6dd6 100644 --- a/jedi/evaluate/compiled/mixed.py +++ b/jedi/evaluate/compiled/mixed.py @@ -9,7 +9,8 @@ from jedi import settings from jedi.evaluate import compiled from jedi.cache import underscore_memoization from jedi.evaluate import imports -from jedi.evaluate.context import Context, ContextSet +from jedi.evaluate.base_context import Context, ContextSet +from jedi.evaluate.context import ModuleContext from jedi.evaluate.cache import evaluator_function_cache from jedi.evaluate.compiled.getattr_static import getattr_static @@ -206,7 +207,6 @@ def _create(evaluator, obj, parent_context=None, *args): if parent_context.tree_node.get_root_node() == module_node: module_context = parent_context.get_root_context() else: - from jedi.evaluate.context.module import ModuleContext module_context = ModuleContext(evaluator, module_node, path=path) # TODO this __name__ is probably wrong. name = compiled_object.get_root_context().py__name__() diff --git a/jedi/evaluate/context/__init__.py b/jedi/evaluate/context/__init__.py index 0047f15c..db2f87fb 100644 --- a/jedi/evaluate/context/__init__.py +++ b/jedi/evaluate/context/__init__.py @@ -1,5 +1,3 @@ -from jedi.evaluate.context.base import Context, iterate_contexts, \ - TreeContext, ContextualizedName, ContextualizedNode, ContextSet, \ - NO_CONTEXTS, iterator_to_context_set from jedi.evaluate.context.lazy import AbstractLazyContext, LazyKnownContext, \ LazyKnownContexts, LazyTreeContext, LazyUnknownContext, get_merged_lazy_context +from jedi.evaluate.context.module import ModuleContext diff --git a/jedi/evaluate/context/function.py b/jedi/evaluate/context/function.py index b2373f50..e758bac2 100644 --- a/jedi/evaluate/context/function.py +++ b/jedi/evaluate/context/function.py @@ -13,8 +13,9 @@ from jedi.evaluate import helpers from jedi.evaluate import iterable from jedi.evaluate.filters import ParserTreeFilter, FunctionExecutionFilter, \ ContextName, AbstractNameDefinition, ParamName -from jedi.evaluate import context -from jedi.evaluate.context import ContextualizedNode, NO_CONTEXTS, ContextSet +from jedi.evaluate.base_context import ContextualizedNode, NO_CONTEXTS, \ + ContextSet, TreeContext +from jedi.evaluate.context import LazyKnownContexts, LazyKnownContext, LazyTreeContext from jedi import parser_utils from jedi.evaluate.parser_cache import get_yield_exprs @@ -33,7 +34,7 @@ class LambdaName(AbstractNameDefinition): return ContextSet(self._lambda_context) -class FunctionContext(use_metaclass(CachedMetaClass, context.TreeContext)): +class FunctionContext(use_metaclass(CachedMetaClass, TreeContext)): """ Needed because of decorators. Decorators are evaluated here. """ @@ -98,7 +99,7 @@ class FunctionContext(use_metaclass(CachedMetaClass, context.TreeContext)): for param in self.tree_node.get_params()] -class FunctionExecutionContext(context.TreeContext): +class FunctionExecutionContext(TreeContext): """ This class is used to evaluate functions and their returns. @@ -155,7 +156,7 @@ class FunctionExecutionContext(context.TreeContext): def _eval_yield(self, yield_expr): if yield_expr.type == 'keyword': # `yield` just yields None. - yield context.LazyKnownContext(compiled.create(self.evaluator, None)) + yield LazyKnownContext(compiled.create(self.evaluator, None)) return node = yield_expr.children[1] @@ -164,7 +165,7 @@ class FunctionExecutionContext(context.TreeContext): for lazy_context in cn.infer().iterate(cn): yield lazy_context else: - yield context.LazyTreeContext(self, node) + yield LazyTreeContext(self, node) @recursion.execution_recursion_decorator(default=iter([])) def get_yield_values(self): @@ -192,7 +193,7 @@ class FunctionExecutionContext(context.TreeContext): else: types = self.get_return_values(check_yields=True) if types: - yield context.LazyKnownContexts(types) + yield LazyKnownContexts(types) return last_for_stmt = for_stmt @@ -222,5 +223,3 @@ class FunctionExecutionContext(context.TreeContext): @evaluator_method_cache() def get_params(self): return self.var_args.get_params(self) - - diff --git a/jedi/evaluate/context/instance.py b/jedi/evaluate/context/instance.py index 3bfa1db0..0a7972c3 100644 --- a/jedi/evaluate/context/instance.py +++ b/jedi/evaluate/context/instance.py @@ -4,8 +4,9 @@ from jedi._compatibility import is_py3 from jedi import debug from jedi.evaluate import compiled from jedi.evaluate import filters -from jedi.evaluate.context import Context, LazyKnownContext, LazyKnownContexts, \ - ContextSet, iterator_to_context_set, NO_CONTEXTS +from jedi.evaluate.base_context import Context, NO_CONTEXTS, ContextSet, \ + iterator_to_context_set +from jedi.evaluate.context import LazyKnownContext, LazyKnownContexts from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.param import AbstractArguments, AnonymousArguments from jedi.cache import memoize_method diff --git a/jedi/evaluate/context/klass.py b/jedi/evaluate/context/klass.py index 7c5a3aa4..4686e22f 100644 --- a/jedi/evaluate/context/klass.py +++ b/jedi/evaluate/context/klass.py @@ -43,8 +43,9 @@ from jedi.evaluate import compiled from jedi.evaluate import param from jedi.evaluate.filters import ParserTreeFilter, TreeNameDefinition, \ ContextName, AnonymousInstanceParamName -from jedi.evaluate import context -from jedi.evaluate.context import ContextSet, iterator_to_context_set +from jedi.evaluate.base_context import ContextSet, iterator_to_context_set, \ + TreeContext +from jedi.evaluate.context import LazyKnownContext def apply_py__get__(context, base_context): @@ -84,7 +85,7 @@ class ClassFilter(ParserTreeFilter): for name in names] -class ClassContext(use_metaclass(CachedMetaClass, context.TreeContext)): +class ClassContext(use_metaclass(CachedMetaClass, TreeContext)): """ This class is not only important to extend `tree.Class`, it is also a important for descriptors (if the descriptor methods are evaluated or not). @@ -138,7 +139,7 @@ class ClassContext(use_metaclass(CachedMetaClass, context.TreeContext)): args = param.TreeArguments(self.evaluator, self, arglist) return [value for key, value in args.unpack() if key is None] else: - return [context.LazyKnownContext(compiled.create(self.evaluator, object))] + return [LazyKnownContext(compiled.create(self.evaluator, object))] def py__call__(self, params): from jedi.evaluate.context.instance import TreeInstance diff --git a/jedi/evaluate/context/lazy.py b/jedi/evaluate/context/lazy.py index aeca6690..9380212e 100644 --- a/jedi/evaluate/context/lazy.py +++ b/jedi/evaluate/context/lazy.py @@ -1,4 +1,4 @@ -from jedi.evaluate.context import ContextSet, NO_CONTEXTS +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS class AbstractLazyContext(object): def __init__(self, data): diff --git a/jedi/evaluate/context/module.py b/jedi/evaluate/context/module.py index fc0d291b..471f3165 100644 --- a/jedi/evaluate/context/module.py +++ b/jedi/evaluate/context/module.py @@ -10,7 +10,7 @@ from jedi.evaluate.cache import CachedMetaClass, evaluator_method_cache from jedi.evaluate.filters import GlobalNameFilter, ContextNameMixin, \ AbstractNameDefinition, ParserTreeFilter, DictFilter from jedi.evaluate import compiled -from jedi.evaluate.context import TreeContext +from jedi.evaluate.base_context import TreeContext from jedi.evaluate.imports import SubModuleName, infer_import class _ModuleAttributeName(AbstractNameDefinition): diff --git a/jedi/evaluate/context/namespace.py b/jedi/evaluate/context/namespace.py index 3229b9fb..e40c23a5 100644 --- a/jedi/evaluate/context/namespace.py +++ b/jedi/evaluate/context/namespace.py @@ -5,8 +5,7 @@ from jedi._compatibility import use_metaclass from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass from jedi.evaluate import imports from jedi.evaluate.filters import DictFilter, AbstractNameDefinition -from jedi.evaluate import context -from jedi.evaluate.context import NO_CONTEXTS +from jedi.evaluate.base_context import NO_CONTEXTS, TreeContext class ImplicitNSName(AbstractNameDefinition): @@ -25,7 +24,7 @@ class ImplicitNSName(AbstractNameDefinition): return self.implicit_ns_context -class ImplicitNamespaceContext(use_metaclass(CachedMetaClass, context.TreeContext)): +class ImplicitNamespaceContext(use_metaclass(CachedMetaClass, TreeContext)): """ Provides support for implicit namespace packages """ diff --git a/jedi/evaluate/docstrings.py b/jedi/evaluate/docstrings.py index e3c06595..b7d600e0 100644 --- a/jedi/evaluate/docstrings.py +++ b/jedi/evaluate/docstrings.py @@ -24,8 +24,9 @@ from jedi._compatibility import u from jedi.evaluate.utils import indent_block from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.iterable import SequenceLiteralContext, FakeSequence -from jedi.evaluate.context import iterator_to_context_set, ContextSet, \ - NO_CONTEXTS, LazyKnownContexts +from jedi.evaluate.base_context import iterator_to_context_set, ContextSet, \ + NO_CONTEXTS +from jedi.evaluate.context import LazyKnownContexts DOCSTRING_PARAM_PATTERNS = [ diff --git a/jedi/evaluate/dynamic.py b/jedi/evaluate/dynamic.py index e5b20d8b..01e18d61 100644 --- a/jedi/evaluate/dynamic.py +++ b/jedi/evaluate/dynamic.py @@ -25,10 +25,9 @@ from jedi.evaluate import imports from jedi.evaluate.param import TreeArguments, create_default_params from jedi.evaluate.helpers import is_stdlib_path from jedi.evaluate.utils import to_list -from jedi.evaluate.context import ContextSet from jedi.parser_utils import get_parent_scope -from jedi.evaluate.context.module import ModuleContext -from jedi.evaluate.context import instance +from jedi.evaluate.context import ModuleContext, instance +from jedi.evaluate.base_context import ContextSet diff --git a/jedi/evaluate/filters.py b/jedi/evaluate/filters.py index 71e2dd61..ef9e5a68 100644 --- a/jedi/evaluate/filters.py +++ b/jedi/evaluate/filters.py @@ -6,7 +6,7 @@ from abc import abstractmethod from parso.tree import search_ancestor from jedi.evaluate import flow_analysis -from jedi.evaluate.context import ContextSet +from jedi.evaluate.base_context import ContextSet from jedi.parser_utils import get_parent_scope from jedi.evaluate.utils import to_list diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index b1f74887..ff55157f 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -27,7 +27,7 @@ from jedi.evaluate import flow_analysis from jedi.evaluate import param from jedi.evaluate import helpers from jedi.evaluate.filters import get_global_filters, TreeNameDefinition -from jedi.evaluate.context import ContextSet +from jedi.evaluate.base_context import ContextSet from jedi.parser_utils import is_scope, get_parent_scope diff --git a/jedi/evaluate/imports.py b/jedi/evaluate/imports.py index 745be903..adfef8fa 100644 --- a/jedi/evaluate/imports.py +++ b/jedi/evaluate/imports.py @@ -31,7 +31,7 @@ from jedi.evaluate import analysis from jedi.evaluate.utils import unite from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.filters import AbstractNameDefinition -from jedi.evaluate.context import ContextSet, NO_CONTEXTS +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS # This memoization is needed, because otherwise we will infinitely loop on @@ -420,7 +420,7 @@ class Importer(object): :param only_modules: Indicates wheter it's possible to import a definition that is not defined in a module. """ - from jedi.evaluate.context.module import ModuleContext + from jedi.evaluate.context import ModuleContext from jedi.evaluate.context.namespace import ImplicitNamespaceContext names = [] if self.import_path: @@ -490,7 +490,7 @@ def _load_module(evaluator, path=None, code=None, sys_path=None, parent_module=N code=code, path=path, cache=True, diff_cache=True, cache_path=settings.cache_directory) - from jedi.evaluate.context.module import ModuleContext + from jedi.evaluate.context import ModuleContext return ModuleContext(evaluator, module_node, path=path) else: return compiled.load_module(evaluator, path) @@ -509,7 +509,7 @@ def get_modules_containing_name(evaluator, modules, name): """ Search a name in the directories of modules. """ - from jedi.evaluate.context.module import ModuleContext + from jedi.evaluate.context import ModuleContext def check_python_file(path): try: diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index cb82e159..0e9fe3b5 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -28,17 +28,18 @@ from jedi.evaluate.utils import to_list from jedi.evaluate import compiled from jedi.evaluate import helpers from jedi.evaluate import analysis -from jedi.evaluate.helpers import is_string +from jedi.evaluate import context from jedi.evaluate import recursion +from jedi.evaluate.helpers import is_string from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.filters import DictFilter, AbstractNameDefinition, \ ParserTreeFilter -from jedi.evaluate import context -from jedi.evaluate.context import ContextSet, NO_CONTEXTS, Context +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, Context, \ + TreeContext, ContextualizedNode from jedi.parser_utils import get_comp_fors -class AbstractSequence(context.Context): +class AbstractSequence(Context): builtin_methods = {} api_type = 'instance' @@ -168,7 +169,7 @@ class GeneratorMixin(object): return compiled.CompiledContextName(self, 'generator') -class Generator(GeneratorMixin, context.Context): +class Generator(GeneratorMixin, Context): """Handling of `yield` functions.""" def __init__(self, evaluator, func_execution_context): super(Generator, self).__init__(evaluator, parent_context=evaluator.BUILTINS) @@ -181,7 +182,7 @@ class Generator(GeneratorMixin, context.Context): return "<%s of %s>" % (type(self).__name__, self._func_execution_context) -class CompForContext(context.TreeContext): +class CompForContext(TreeContext): @classmethod def from_comp_for(cls, parent_context, comp_for): return cls(parent_context.evaluator, parent_context, comp_for) @@ -244,7 +245,7 @@ class Comprehension(AbstractSequence): parent_context = parent_context or self._defining_context input_types = parent_context.eval_node(input_node) - cn = context.ContextualizedNode(parent_context, input_node) + cn = ContextualizedNode(parent_context, input_node) iterated = input_types.iterate(cn) exprlist = comp_for.children[1] for i, lazy_context in enumerate(iterated): @@ -739,7 +740,7 @@ class _ArrayInstance(object): return self.py__iter__() -class Slice(context.Context): +class Slice(Context): def __init__(self, context, start, stop, step): super(Slice, self).__init__( context.evaluator, diff --git a/jedi/evaluate/param.py b/jedi/evaluate/param.py index 447bc129..00105ef0 100644 --- a/jedi/evaluate/param.py +++ b/jedi/evaluate/param.py @@ -10,7 +10,7 @@ from jedi.evaluate import context from jedi.evaluate import docstrings from jedi.evaluate import pep0484 from jedi.evaluate.filters import ParamName -from jedi.evaluate.context import NO_CONTEXTS +from jedi.evaluate.base_context import NO_CONTEXTS def add_argument_issue(parent_context, error_name, lazy_context, message): diff --git a/jedi/evaluate/pep0484.py b/jedi/evaluate/pep0484.py index eec0e562..95287851 100644 --- a/jedi/evaluate/pep0484.py +++ b/jedi/evaluate/pep0484.py @@ -27,8 +27,9 @@ from parso.python import tree from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate import compiled -from jedi.evaluate.context import LazyTreeContext, NO_CONTEXTS, ContextSet -from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.base_context import NO_CONTEXTS, ContextSet +from jedi.evaluate.context import LazyTreeContext +from jedi.evaluate.context import ModuleContext from jedi import debug from jedi import _compatibility from jedi import parser_utils diff --git a/jedi/evaluate/recursion.py b/jedi/evaluate/recursion.py index 02f13db9..e2f34a4a 100644 --- a/jedi/evaluate/recursion.py +++ b/jedi/evaluate/recursion.py @@ -29,7 +29,7 @@ therefore the quality might not always be maximal. from contextlib import contextmanager from jedi import debug -from jedi.evaluate.context import NO_CONTEXTS +from jedi.evaluate.base_context import NO_CONTEXTS recursion_limit = 15 diff --git a/jedi/evaluate/stdlib.py b/jedi/evaluate/stdlib.py index 8a13e170..540a3cb3 100644 --- a/jedi/evaluate/stdlib.py +++ b/jedi/evaluate/stdlib.py @@ -20,10 +20,11 @@ from jedi.evaluate import iterable from jedi import debug from jedi.evaluate import param from jedi.evaluate import analysis -from jedi.evaluate.context import LazyTreeContext, ContextualizedNode, \ +from jedi.evaluate.base_context import ContextualizedNode, \ NO_CONTEXTS, ContextSet +from jedi.evaluate.context import LazyTreeContext from jedi.evaluate.context.klass import ClassContext -from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.context import ModuleContext from jedi.evaluate.syntax_tree import is_string # Now this is all part of fake tuples in Jedi. However super doesn't work on diff --git a/jedi/evaluate/syntax_tree.py b/jedi/evaluate/syntax_tree.py index 2de3ac5d..f36dad9b 100644 --- a/jedi/evaluate/syntax_tree.py +++ b/jedi/evaluate/syntax_tree.py @@ -8,7 +8,7 @@ from parso.python import tree from jedi import debug from jedi import parser_utils -from jedi.evaluate.context import ContextSet, NO_CONTEXTS, ContextualizedNode, \ +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, ContextualizedNode, \ ContextualizedName, iterator_to_context_set, iterate_contexts from jedi.evaluate import compiled from jedi.evaluate import pep0484 diff --git a/jedi/evaluate/sys_path.py b/jedi/evaluate/sys_path.py index 7eeaf1f4..28071dce 100644 --- a/jedi/evaluate/sys_path.py +++ b/jedi/evaluate/sys_path.py @@ -7,7 +7,7 @@ from jedi.evaluate.site import addsitedir from jedi._compatibility import exec_function, unicode from jedi.evaluate.cache import evaluator_function_cache from jedi.evaluate.compiled import CompiledObject -from jedi.evaluate.context import ContextualizedNode +from jedi.evaluate.base_context import ContextualizedNode from jedi import settings from jedi import debug from jedi.evaluate.utils import ignored @@ -219,7 +219,7 @@ def _get_paths_from_buildout_script(evaluator, buildout_script_path): debug.warning('Error trying to read buildout_script: %s', buildout_script_path) return - from jedi.evaluate.context.module import ModuleContext + from jedi.evaluate.context import ModuleContext for path in _check_module(ModuleContext(evaluator, module_node, buildout_script_path)): yield path