diff --git a/jedi/common/__init__.py b/jedi/common/__init__.py index ba2e2f44..b190d863 100644 --- a/jedi/common/__init__.py +++ b/jedi/common/__init__.py @@ -1,2 +1 @@ -from jedi.common.context import ContextSet, NO_CONTEXTS, \ - iterator_to_context_set +from jedi.common.context import BaseContextSet diff --git a/jedi/common/context.py b/jedi/common/context.py index ecf12a5a..95839ea9 100644 --- a/jedi/common/context.py +++ b/jedi/common/context.py @@ -1,4 +1,4 @@ -class ContextSet(object): +class BaseContextSet(object): def __init__(self, *args): self._set = set(args) @@ -20,14 +20,14 @@ class ContextSet(object): aggregated = set() sets = list(sets) for set_ in sets: - if isinstance(set_, ContextSet): + if isinstance(set_, BaseContextSet): aggregated |= set_._set else: aggregated |= set_ return cls.from_set(aggregated) def __or__(self, other): - return ContextSet.from_set(self._set | other._set) + return type(self).from_set(self._set | other._set) def __iter__(self): for element in self._set: @@ -43,22 +43,12 @@ class ContextSet(object): return '%s(%s)' % (self.__class__.__name__, ', '.join(str(s) for s in self._set)) def filter(self, filter_func): - return ContextSet.from_iterable(filter(filter_func, self._set)) + return type(self).from_iterable(filter(filter_func, self._set)) def __getattr__(self, name): def mapper(*args, **kwargs): - return ContextSet.from_sets( + return type(self).from_sets( getattr(context, name)(*args, **kwargs) for context in self._set ) return mapper - - -def iterator_to_context_set(func): - def wrapper(*args, **kwargs): - return ContextSet.from_iterable(func(*args, **kwargs)) - - return wrapper - - -NO_CONTEXTS = ContextSet() diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 96651196..7bd17c55 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -82,8 +82,8 @@ from jedi.evaluate import helpers from jedi.evaluate import pep0484 from jedi.evaluate.filters import TreeNameDefinition, ParamName from jedi.evaluate.instance import AnonymousInstance, BoundMethod -from jedi.evaluate.context import ContextualizedName, ContextualizedNode -from jedi.common import ContextSet, NO_CONTEXTS +from jedi.evaluate.context import ContextualizedName, ContextualizedNode, \ + ContextSet, NO_CONTEXTS from jedi import parser_utils diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index c4d3ae32..ab9ea8f5 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -13,9 +13,8 @@ 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 +from jedi.evaluate.context import Context, LazyKnownContext, ContextSet from jedi.evaluate.compiled.getattr_static import getattr_static -from jedi.common import ContextSet from . import fake diff --git a/jedi/evaluate/compiled/mixed.py b/jedi/evaluate/compiled/mixed.py index 2fac34ff..3b397a31 100644 --- a/jedi/evaluate/compiled/mixed.py +++ b/jedi/evaluate/compiled/mixed.py @@ -9,10 +9,9 @@ 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 +from jedi.evaluate.context import Context, ContextSet from jedi.evaluate.cache import evaluator_function_cache from jedi.evaluate.compiled.getattr_static import getattr_static -from jedi.common import ContextSet class MixedObject(object): diff --git a/jedi/evaluate/context.py b/jedi/evaluate/context.py index 7ff57d5d..6202e99f 100644 --- a/jedi/evaluate/context.py +++ b/jedi/evaluate/context.py @@ -1,7 +1,7 @@ from jedi._compatibility import Python3Method from parso.python.tree import ExprStmt, CompFor from jedi.parser_utils import clean_scope_docstring, get_doc_with_call_signature -from jedi.common import ContextSet, NO_CONTEXTS +from jedi.common import BaseContextSet class Context(object): @@ -204,3 +204,17 @@ class ContextualizedName(ContextualizedNode): compare = node node = node.parent return indexes + + +class ContextSet(BaseContextSet): + pass + + +NO_CONTEXTS = ContextSet() + + +def iterator_to_context_set(func): + def wrapper(*args, **kwargs): + return ContextSet.from_iterable(func(*args, **kwargs)) + + return wrapper diff --git a/jedi/evaluate/docstrings.py b/jedi/evaluate/docstrings.py index ea471811..f80036bd 100644 --- a/jedi/evaluate/docstrings.py +++ b/jedi/evaluate/docstrings.py @@ -21,11 +21,11 @@ from textwrap import dedent from parso import parse from jedi._compatibility import u -from jedi.evaluate.utils import unite, indent_block -from jedi.evaluate import context +from jedi.evaluate.utils import indent_block from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.iterable import SequenceLiteralContext, FakeSequence -from jedi.common import iterator_to_context_set, ContextSet, NO_CONTEXTS +from jedi.evaluate.context import iterator_to_context_set, ContextSet, \ + NO_CONTEXTS, LazyKnownContexts DOCSTRING_PARAM_PATTERNS = [ @@ -241,7 +241,7 @@ def _execute_array_values(evaluator, array): _execute_array_values(evaluator, typ) for typ in lazy_context.infer() ) - values.append(context.LazyKnownContexts(objects)) + values.append(LazyKnownContexts(objects)) return set([FakeSequence(evaluator, array.array_type, values)]) else: return array.execute_evaluated() diff --git a/jedi/evaluate/dynamic.py b/jedi/evaluate/dynamic.py index 9857f312..f5b4cd0d 100644 --- a/jedi/evaluate/dynamic.py +++ b/jedi/evaluate/dynamic.py @@ -25,7 +25,7 @@ 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.common import ContextSet +from jedi.evaluate.context import ContextSet from jedi.parser_utils import get_parent_scope diff --git a/jedi/evaluate/filters.py b/jedi/evaluate/filters.py index e3edb1eb..f4c6463b 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.common import ContextSet +from jedi.evaluate.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 15d45108..fd37adac 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -18,7 +18,6 @@ check for -> a is a string). There's big potential in these checks. from parso.python import tree from parso.tree import search_ancestor from jedi import debug -from jedi.evaluate.utils import unite from jedi import settings from jedi.evaluate import representation as er from jedi.evaluate.instance import AbstractInstanceContext @@ -31,8 +30,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 ContextualizedName, ContextualizedNode -from jedi.common import ContextSet +from jedi.evaluate.context import ContextualizedName, ContextualizedNode, ContextSet from jedi.parser_utils import is_scope, get_parent_scope diff --git a/jedi/evaluate/imports.py b/jedi/evaluate/imports.py index 716fa35f..f06d3b66 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.common import ContextSet, NO_CONTEXTS +from jedi.evaluate.context import ContextSet, NO_CONTEXTS # This memoization is needed, because otherwise we will infinitely loop on diff --git a/jedi/evaluate/instance.py b/jedi/evaluate/instance.py index f1116707..747f5802 100644 --- a/jedi/evaluate/instance.py +++ b/jedi/evaluate/instance.py @@ -4,13 +4,13 @@ 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 +from jedi.evaluate.context import Context, LazyKnownContext, LazyKnownContexts, \ + ContextSet, iterator_to_context_set, NO_CONTEXTS from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.param import AbstractArguments, AnonymousArguments from jedi.cache import memoize_method from jedi.evaluate import representation as er from jedi.evaluate import iterable -from jedi.common import ContextSet, iterator_to_context_set, NO_CONTEXTS from jedi.parser_utils import get_parent_scope diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index 2b8425ab..be62ecb0 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -22,20 +22,20 @@ It is important to note that: """ from jedi import debug from jedi import settings -from jedi.evaluate.utils import unite, safe_property +from jedi.evaluate.utils import safe_property from jedi._compatibility import unicode, zip_longest, is_py3 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 import pep0484 -from jedi.evaluate import context from jedi.evaluate import precedence from jedi.evaluate import recursion from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.filters import DictFilter, AbstractNameDefinition, \ ParserTreeFilter -from jedi.common import ContextSet, NO_CONTEXTS +from jedi.evaluate import context +from jedi.evaluate.context import ContextSet, NO_CONTEXTS from jedi.parser_utils import get_comp_fors diff --git a/jedi/evaluate/param.py b/jedi/evaluate/param.py index a914d81a..f5a183a1 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.common import NO_CONTEXTS +from jedi.evaluate.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 0fa7ca41..869cf8a8 100644 --- a/jedi/evaluate/pep0484.py +++ b/jedi/evaluate/pep0484.py @@ -27,8 +27,7 @@ from parso.python import tree from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate import compiled -from jedi.evaluate.context import LazyTreeContext -from jedi.common import NO_CONTEXTS, ContextSet +from jedi.evaluate.context import LazyTreeContext, NO_CONTEXTS, ContextSet from jedi import debug from jedi import _compatibility from jedi import parser_utils diff --git a/jedi/evaluate/precedence.py b/jedi/evaluate/precedence.py index 8206dac5..7e054c05 100644 --- a/jedi/evaluate/precedence.py +++ b/jedi/evaluate/precedence.py @@ -7,7 +7,7 @@ from jedi._compatibility import unicode from jedi import debug from jedi.evaluate.compiled import CompiledObject, create, builtin_from_name from jedi.evaluate import analysis -from jedi.common import ContextSet, NO_CONTEXTS, iterator_to_context_set +from jedi.evaluate.context import ContextSet, NO_CONTEXTS, iterator_to_context_set # Maps Python syntax to the operator module. COMPARISON_OPERATORS = { diff --git a/jedi/evaluate/recursion.py b/jedi/evaluate/recursion.py index ebc71f09..02f13db9 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.common import NO_CONTEXTS +from jedi.evaluate.context import NO_CONTEXTS recursion_limit = 15 diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index c427b786..fb7e81d5 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -63,8 +63,8 @@ from jedi.evaluate.filters import ParserTreeFilter, FunctionExecutionFilter, \ ParamName, AnonymousInstanceParamName, TreeNameDefinition, \ ContextNameMixin from jedi.evaluate import context -from jedi.evaluate.context import ContextualizedNode -from jedi.common import NO_CONTEXTS, ContextSet, iterator_to_context_set +from jedi.evaluate.context import ContextualizedNode, NO_CONTEXTS, \ + ContextSet, iterator_to_context_set from jedi import parser_utils from jedi.evaluate.parser_cache import get_yield_exprs diff --git a/jedi/evaluate/stdlib.py b/jedi/evaluate/stdlib.py index 169e709e..0f85b62d 100644 --- a/jedi/evaluate/stdlib.py +++ b/jedi/evaluate/stdlib.py @@ -23,8 +23,8 @@ from jedi import debug from jedi.evaluate import precedence from jedi.evaluate import param from jedi.evaluate import analysis -from jedi.evaluate.context import LazyTreeContext, ContextualizedNode -from jedi.common import NO_CONTEXTS, ContextSet +from jedi.evaluate.context import LazyTreeContext, ContextualizedNode, \ + NO_CONTEXTS, ContextSet # Now this is all part of fake tuples in Jedi. However super doesn't work on # __init__ and __new__ doesn't work at all. So adding this to nametuples is