To be able to customize ContextSet, move a subclass to evaluate.context

This commit is contained in:
Dave Halter
2017-09-27 09:20:58 +02:00
parent faa2d01593
commit b74c8cb033
19 changed files with 46 additions and 48 deletions

View File

@@ -1,2 +1 @@
from jedi.common.context import ContextSet, NO_CONTEXTS, \
iterator_to_context_set
from jedi.common.context import BaseContextSet

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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):

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

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.common import ContextSet, NO_CONTEXTS
from jedi.evaluate.context import ContextSet, NO_CONTEXTS
# This memoization is needed, because otherwise we will infinitely loop on

View File

@@ -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

View File

@@ -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

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.common import NO_CONTEXTS
from jedi.evaluate.context import NO_CONTEXTS
def add_argument_issue(parent_context, error_name, lazy_context, message):

View File

@@ -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

View File

@@ -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 = {

View File

@@ -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

View File

@@ -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

View File

@@ -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