1
0
forked from VimPlug/jedi

Move the base Context stuff to another module to keep context free for imports.

This commit is contained in:
Dave Halter
2017-09-30 16:46:07 +02:00
parent 3c2221ec2d
commit 3c75f27376
27 changed files with 62 additions and 60 deletions
+1 -1
View File
@@ -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, \
+1 -1
View File
@@ -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
+2 -1
View File
@@ -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
+2 -2
View File
@@ -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__()
+1 -3
View File
@@ -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
+8 -9
View File
@@ -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)
+3 -2
View File
@@ -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
+5 -4
View File
@@ -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
+1 -1
View File
@@ -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):
+1 -1
View File
@@ -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):
+2 -3
View File
@@ -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
"""
+3 -2
View File
@@ -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 = [
+2 -3
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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:
+9 -8
View File
@@ -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,
+1 -1
View File
@@ -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):
+3 -2
View File
@@ -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
+1 -1
View File
@@ -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
+3 -2
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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