diff --git a/jedi/api/helpers.py b/jedi/api/helpers.py index 48beb31e..1688dba9 100644 --- a/jedi/api/helpers.py +++ b/jedi/api/helpers.py @@ -9,7 +9,7 @@ from parso.python.parser import Parser from parso.python import tree from jedi._compatibility import u, Parameter -from jedi.inference.base_value import NO_CONTEXTS +from jedi.inference.base_value import NO_VALUES from jedi.inference.syntax_tree import infer_atom from jedi.inference.helpers import infer_call_of_leaf from jedi.inference.compiled import get_string_value_set @@ -143,7 +143,7 @@ def infer_goto_definition(infer_state, value, leaf): return infer_state.goto_definitions(value, leaf) parent = leaf.parent - definitions = NO_CONTEXTS + definitions = NO_VALUES if parent.type == 'atom': # e.g. `(a + b)` definitions = value.infer_node(leaf.parent) diff --git a/jedi/inference/__init__.py b/jedi/inference/__init__.py index b4065ce3..b08ace07 100644 --- a/jedi/inference/__init__.py +++ b/jedi/inference/__init__.py @@ -76,7 +76,7 @@ from jedi.inference.cache import infer_state_function_cache from jedi.inference import helpers from jedi.inference.names import TreeNameDefinition, ParamName from jedi.inference.base_value import ContextualizedName, ContextualizedNode, \ - ContextSet, NO_CONTEXTS, iterate_values + ContextSet, NO_VALUES, iterate_values from jedi.inference.value import ClassContext, FunctionContext, \ AnonymousInstance, BoundMethod from jedi.inference.value.iterable import CompForContext @@ -208,7 +208,7 @@ class InferState(object): for name_dict in name_dicts: name_dict[if_name.value] = definitions if len(name_dicts) > 1: - result = NO_CONTEXTS + result = NO_VALUES for name_dict in name_dicts: with helpers.predefine_names(value, if_stmt, name_dict): result |= infer_node(value, element) @@ -233,7 +233,7 @@ class InferState(object): return infer_node(value, element) return self._infer_element_cached(value, element) - @infer_state_function_cache(default=NO_CONTEXTS) + @infer_state_function_cache(default=NO_VALUES) def _infer_element_cached(self, value, element): return infer_node(value, element) diff --git a/jedi/inference/arguments.py b/jedi/inference/arguments.py index 24061d7f..e25425d3 100644 --- a/jedi/inference/arguments.py +++ b/jedi/inference/arguments.py @@ -9,7 +9,7 @@ from jedi.inference import analysis from jedi.inference.lazy_value import LazyKnownContext, LazyKnownContexts, \ LazyTreeContext, get_merged_lazy_value from jedi.inference.names import ParamName, TreeNameDefinition -from jedi.inference.base_value import NO_CONTEXTS, ContextSet, ContextualizedNode +from jedi.inference.base_value import NO_VALUES, ContextSet, ContextualizedNode from jedi.inference.value import iterable from jedi.inference.cache import infer_state_as_method_param_cache from jedi.inference.param import get_executed_params_and_issues, ExecutedParam @@ -64,7 +64,7 @@ def repack_with_argument_clinic(string, keep_arguments_param=False, keep_callbac clinic_args )) except ParamIssue: - return NO_CONTEXTS + return NO_VALUES else: return func(value, *args, **kwargs) @@ -98,7 +98,7 @@ def _iterate_argument_clinic(infer_state, arguments, parameters): name, len(parameters), i) raise ParamIssue - value_set = NO_CONTEXTS if argument is None else argument.infer() + value_set = NO_VALUES if argument is None else argument.infer() if not value_set and not optional: # For the stdlib we always want values. If we don't get them, diff --git a/jedi/inference/base_value.py b/jedi/inference/base_value.py index 32558fe8..a66d982f 100644 --- a/jedi/inference/base_value.py +++ b/jedi/inference/base_value.py @@ -137,7 +137,7 @@ class Context(HelperContextMixin, BaseContext): valueualized_node.node, message="TypeError: '%s' object is not subscriptable" % self ) - return NO_CONTEXTS + return NO_VALUES def py__iter__(self, valueualized_node=None): if valueualized_node is not None: @@ -196,11 +196,11 @@ class Context(HelperContextMixin, BaseContext): def py__call__(self, arguments): debug.warning("no execution possible %s", self) - return NO_CONTEXTS + return NO_VALUES def py__stop_iteration_returns(self): debug.warning("Not possible to return the stop iterations of %s", self) - return NO_CONTEXTS + return NO_VALUES def get_qualified_names(self): # Returns Optional[Tuple[str, ...]] @@ -346,7 +346,7 @@ def _getitem(value, index_values, valueualized_node): # The actual getitem call. simple_getitem = getattr(value, 'py__simple_getitem__', None) - result = NO_CONTEXTS + result = NO_VALUES unused_values = set() for index_value in index_values: if simple_getitem is not None: @@ -426,7 +426,7 @@ class ContextSet(BaseContextSet): return [sig for c in self._set for sig in c.get_signatures()] -NO_CONTEXTS = ContextSet([]) +NO_VALUES = ContextSet([]) def iterator_to_value_set(func): diff --git a/jedi/inference/compiled/value.py b/jedi/inference/compiled/value.py index 4d72f286..f061ee58 100644 --- a/jedi/inference/compiled/value.py +++ b/jedi/inference/compiled/value.py @@ -11,7 +11,7 @@ from jedi.cache import underscore_memoization, memoize_method from jedi.inference.filters import AbstractFilter from jedi.inference.names import AbstractNameDefinition, ContextNameMixin, \ ParamNameInterface -from jedi.inference.base_value import Context, ContextSet, NO_CONTEXTS +from jedi.inference.base_value import Context, ContextSet, NO_VALUES from jedi.inference.lazy_value import LazyKnownContext from jedi.inference.compiled.access import _sentinel from jedi.inference.cache import infer_state_function_cache @@ -185,7 +185,7 @@ class CompiledObject(Context): with reraise_getitem_errors(IndexError, KeyError, TypeError): access = self.access_handle.py__simple_getitem__(index) if access is None: - return NO_CONTEXTS + return NO_VALUES return ContextSet([create_from_access_path(self.infer_state, access)]) @@ -265,7 +265,7 @@ class CompiledObject(Context): return create_from_access_path(self.infer_state, self.access_handle.negate()) def get_metaclasses(self): - return NO_CONTEXTS + return NO_VALUES class CompiledName(AbstractNameDefinition): @@ -323,7 +323,7 @@ class SignatureParamName(ParamNameInterface, AbstractNameDefinition): def infer(self): p = self._signature_param infer_state = self.parent_value.infer_state - values = NO_CONTEXTS + values = NO_VALUES if p.has_default: values = ContextSet([create_from_access_path(infer_state, p.default)]) if p.has_annotation: @@ -348,7 +348,7 @@ class UnresolvableParamName(ParamNameInterface, AbstractNameDefinition): return string def infer(self): - return NO_CONTEXTS + return NO_VALUES class CompiledContextName(ContextNameMixin, AbstractNameDefinition): @@ -369,7 +369,7 @@ class EmptyCompiledName(AbstractNameDefinition): self.string_name = name def infer(self): - return NO_CONTEXTS + return NO_VALUES class CompiledObjectFilter(AbstractFilter): diff --git a/jedi/inference/docstrings.py b/jedi/inference/docstrings.py index 549391ff..d3cb722b 100644 --- a/jedi/inference/docstrings.py +++ b/jedi/inference/docstrings.py @@ -26,7 +26,7 @@ from jedi import debug from jedi.inference.utils import indent_block from jedi.inference.cache import infer_state_method_cache from jedi.inference.base_value import iterator_to_value_set, ContextSet, \ - NO_CONTEXTS + NO_VALUES from jedi.inference.lazy_value import LazyKnownContexts @@ -281,7 +281,7 @@ def infer_param(execution_value, param): module_value = execution_value.get_root_value() func = param.get_parent_function() if func.type == 'lambdef': - return NO_CONTEXTS + return NO_VALUES types = infer_docstring(execution_value.py__doc__()) if isinstance(execution_value, FunctionExecutionContext) \ diff --git a/jedi/inference/dynamic.py b/jedi/inference/dynamic.py index 13af71e6..abddc0e4 100644 --- a/jedi/inference/dynamic.py +++ b/jedi/inference/dynamic.py @@ -27,7 +27,7 @@ from jedi.inference.helpers import is_stdlib_path from jedi.inference.utils import to_list from jedi.parser_utils import get_parent_scope from jedi.inference.value import ModuleContext, instance -from jedi.inference.base_value import ContextSet, NO_CONTEXTS +from jedi.inference.base_value import ContextSet, NO_VALUES from jedi.inference import recursion @@ -50,7 +50,7 @@ class DynamicExecutedParams(object): # more or less self referencing. if allowed: return ContextSet.from_sets(p.infer() for p in self._executed_params) - return NO_CONTEXTS + return NO_VALUES @debug.increase_indent diff --git a/jedi/inference/finder.py b/jedi/inference/finder.py index 5af6c63a..b20fcef4 100644 --- a/jedi/inference/finder.py +++ b/jedi/inference/finder.py @@ -27,7 +27,7 @@ from jedi.inference import helpers from jedi.inference.value import iterable from jedi.inference.filters import get_global_filters from jedi.inference.names import TreeNameDefinition -from jedi.inference.base_value import ContextSet, NO_CONTEXTS +from jedi.inference.base_value import ContextSet, NO_VALUES from jedi.parser_utils import is_scope, get_parent_scope from jedi.inference.gradual.conversion import convert_values @@ -61,7 +61,7 @@ class NameFinder(object): node=self._name, ) if check is flow_analysis.UNREACHABLE: - return NO_CONTEXTS + return NO_VALUES return self._found_predefined_types types = self._names_to_types(names, attribute_lookup) @@ -280,7 +280,7 @@ def _check_isinstance_type(value, element, search_name): except AssertionError: return None - value_set = NO_CONTEXTS + value_set = NO_VALUES for cls_or_tup in lazy_value_cls.infer(): if isinstance(cls_or_tup, iterable.Sequence) and cls_or_tup.array_type == 'tuple': for lazy_value in cls_or_tup.py__iter__(): diff --git a/jedi/inference/gradual/annotation.py b/jedi/inference/gradual/annotation.py index fbd5728d..693e6212 100644 --- a/jedi/inference/gradual/annotation.py +++ b/jedi/inference/gradual/annotation.py @@ -11,7 +11,7 @@ from parso import ParserSyntaxError, parse from jedi._compatibility import force_unicode from jedi.inference.cache import infer_state_method_cache -from jedi.inference.base_value import ContextSet, NO_CONTEXTS +from jedi.inference.base_value import ContextSet, NO_VALUES from jedi.inference.gradual.typing import TypeVar, LazyGenericClass, \ AbstractAnnotatedClass from jedi.inference.gradual.typing import GenericClass @@ -47,7 +47,7 @@ def infer_annotation(value, annotation): def _infer_annotation_string(value, string, index=None): node = _get_forward_reference_node(value, string) if node is None: - return NO_CONTEXTS + return NO_VALUES value_set = value.infer_node(node) if index is not None: @@ -142,11 +142,11 @@ def _infer_param(execution_value, param): node = param.parent.parent comment = parser_utils.get_following_comment_same_line(node) if comment is None: - return NO_CONTEXTS + return NO_VALUES match = re.match(r"^#\s*type:\s*\(([^#]*)\)\s*->", comment) if not match: - return NO_CONTEXTS + return NO_VALUES params_comments = _split_comment_param_declaration(match.group(1)) # Find the specific param being investigated @@ -162,10 +162,10 @@ def _infer_param(execution_value, param): if isinstance(execution_value.var_args, InstanceArguments): if index == 0: # Assume it's self, which is already handled - return NO_CONTEXTS + return NO_VALUES index -= 1 if index >= len(params_comments): - return NO_CONTEXTS + return NO_VALUES param_comment = params_comments[index] return _infer_annotation_string( @@ -203,18 +203,18 @@ def infer_return_types(function_execution_value): node = function_execution_value.tree_node comment = parser_utils.get_following_comment_same_line(node) if comment is None: - return NO_CONTEXTS + return NO_VALUES match = re.match(r"^#\s*type:\s*\([^#]*\)\s*->\s*([^#]*)", comment) if not match: - return NO_CONTEXTS + return NO_VALUES return _infer_annotation_string( function_execution_value.function_value.get_default_param_value(), match.group(1).strip() ).execute_annotation() if annotation is None: - return NO_CONTEXTS + return NO_VALUES value = function_execution_value.function_value.get_default_param_value() unknown_type_vars = list(find_unknown_type_vars(value, annotation)) diff --git a/jedi/inference/gradual/conversion.py b/jedi/inference/gradual/conversion.py index 160af90b..95f4d015 100644 --- a/jedi/inference/gradual/conversion.py +++ b/jedi/inference/gradual/conversion.py @@ -1,6 +1,6 @@ from jedi import debug from jedi.inference.base_value import ContextSet, \ - NO_CONTEXTS + NO_VALUES from jedi.inference.utils import to_list from jedi.inference.gradual.stub_value import StubModuleContext @@ -16,7 +16,7 @@ def _stub_to_python_value_set(stub_value, ignore_compiled=False): qualified_names = stub_value.get_qualified_names() if qualified_names is None: - return NO_CONTEXTS + return NO_VALUES was_bound_method = stub_value.is_bound_method() if was_bound_method: @@ -60,7 +60,7 @@ def _try_stub_to_python_names(names, prefer_stub_to_compiled=False): name_list = name.get_qualified_names() if name_list is None: - values = NO_CONTEXTS + values = NO_VALUES else: values = _infer_from_stub( module, @@ -112,7 +112,7 @@ def _python_to_stub_names(names, fallback_to_python=False): continue name_list = name.get_qualified_names() - stubs = NO_CONTEXTS + stubs = NO_VALUES if name_list is not None: stub_module = _load_stub_module(module) if stub_module is not None: @@ -150,7 +150,7 @@ def convert_values(values, only_stubs=False, prefer_stubs=False, ignore_compiled if only_stubs or prefer_stubs: return ContextSet.from_sets( to_stub(value) - or (ContextSet({value}) if prefer_stubs else NO_CONTEXTS) + or (ContextSet({value}) if prefer_stubs else NO_VALUES) for value in values ) else: @@ -173,7 +173,7 @@ def to_stub(value): qualified_names = value.get_qualified_names() stub_module = _load_stub_module(value.get_root_value()) if stub_module is None or qualified_names is None: - return NO_CONTEXTS + return NO_VALUES was_bound_method = value.is_bound_method() if was_bound_method: diff --git a/jedi/inference/gradual/typeshed.py b/jedi/inference/gradual/typeshed.py index baf7ed56..fda1c41b 100644 --- a/jedi/inference/gradual/typeshed.py +++ b/jedi/inference/gradual/typeshed.py @@ -5,7 +5,7 @@ from functools import wraps from jedi.file_io import FileIO from jedi._compatibility import FileNotFoundError, cast_path from jedi.parser_utils import get_cached_code_lines -from jedi.inference.base_value import ContextSet, NO_CONTEXTS +from jedi.inference.base_value import ContextSet, NO_VALUES from jedi.inference.gradual.stub_value import TypingModuleWrapper, StubModuleContext _jedi_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) @@ -150,7 +150,7 @@ def _try_to_load_stub(infer_state, import_names, python_value_set, if parent_module_value is None and len(import_names) > 1: try: parent_module_value = _try_to_load_stub_cached( - infer_state, import_names[:-1], NO_CONTEXTS, + infer_state, import_names[:-1], NO_VALUES, parent_module_value=None, sys_path=sys_path) except KeyError: pass diff --git a/jedi/inference/gradual/typing.py b/jedi/inference/gradual/typing.py index e6279045..364b554b 100644 --- a/jedi/inference/gradual/typing.py +++ b/jedi/inference/gradual/typing.py @@ -9,7 +9,7 @@ from jedi._compatibility import unicode, force_unicode from jedi import debug from jedi.inference.cache import infer_state_method_cache from jedi.inference.compiled import builtin_from_name -from jedi.inference.base_value import ContextSet, NO_CONTEXTS, Context, \ +from jedi.inference.base_value import ContextSet, NO_VALUES, Context, \ iterator_to_value_set, ContextWrapper, LazyContextWrapper from jedi.inference.lazy_value import LazyKnownContexts from jedi.inference.value.iterable import SequenceLiteralContext @@ -286,7 +286,7 @@ class _ContainerBase(_WithIndexBase): return values debug.warning('No param #%s found for annotation %s', index, self._index_value) - return NO_CONTEXTS + return NO_VALUES class Callable(_ContainerBase): @@ -313,7 +313,7 @@ class Tuple(_ContainerBase): return self._get_getitem_values(index).execute_annotation() debug.dbg('The getitem type on Tuple was %s' % index) - return NO_CONTEXTS + return NO_VALUES def py__iter__(self, valueualized_node=None): if self._is_homogenous(): @@ -343,7 +343,7 @@ class Protocol(_ContainerBase): class Any(_BaseTypingContext): def execute_annotation(self): debug.warning('Used Any - returned no results') - return NO_CONTEXTS + return NO_VALUES class TypeVarClass(_BaseTypingContext): @@ -355,7 +355,7 @@ class TypeVarClass(_BaseTypingContext): # The name must be given, otherwise it's useless. if var_name is None or key is not None: debug.warning('Found a variable without a name %s', arguments) - return NO_CONTEXTS + return NO_VALUES return ContextSet([TypeVar.create_cached( self.infer_state, @@ -424,7 +424,7 @@ class TypeVar(_BaseTypingContext): if self._constraints_lazy_values: return self.constraints debug.warning('Tried to infer the TypeVar %s without a given type', self._var_name) - return NO_CONTEXTS + return NO_VALUES def is_same_class(self, other): # Everything can match an undefined type var. @@ -466,7 +466,7 @@ class NewTypeFunction(_BaseTypingContext): next(ordered_args, (None, None)) _, second_arg = next(ordered_args, (None, None)) if second_arg is None: - return NO_CONTEXTS + return NO_VALUES return ContextSet( NewType( self.infer_state, @@ -602,7 +602,7 @@ class AbstractAnnotatedClass(ClassMixin, ContextWrapper): changed = False new_generics = [] for generic_set in self.get_generics(): - values = NO_CONTEXTS + values = NO_VALUES for generic in generic_set: if isinstance(generic, (AbstractAnnotatedClass, TypeVar)): result = generic.define_generics(type_var_dict) @@ -678,7 +678,7 @@ class LazyAnnotatedBaseClass(object): def _remap_type_vars(self, base): filter = self._class_value.get_type_var_filter() for type_var_set in base.get_generics(): - new = NO_CONTEXTS + new = NO_VALUES for type_var in type_var_set: if isinstance(type_var, TypeVar): names = filter.get(type_var.py__name__()) diff --git a/jedi/inference/imports.py b/jedi/inference/imports.py index 3866cba9..c73bfa3d 100644 --- a/jedi/inference/imports.py +++ b/jedi/inference/imports.py @@ -30,7 +30,7 @@ from jedi.inference import analysis from jedi.inference.utils import unite from jedi.inference.cache import infer_state_method_cache from jedi.inference.names import ImportName, SubModuleName -from jedi.inference.base_value import ContextSet, NO_CONTEXTS +from jedi.inference.base_value import ContextSet, NO_VALUES from jedi.inference.gradual.typeshed import import_module_decorator from jedi.inference.value.module import iter_module_names from jedi.plugins import plugin_manager @@ -56,7 +56,7 @@ class ModuleCache(object): # This memoization is needed, because otherwise we will infinitely loop on # certain imports. -@infer_state_method_cache(default=NO_CONTEXTS) +@infer_state_method_cache(default=NO_VALUES) def infer_import(value, tree_name, is_goto=False): module_value = value.get_root_value() import_node = search_ancestor(tree_name, 'import_name', 'import_from') @@ -84,7 +84,7 @@ def infer_import(value, tree_name, is_goto=False): # scopes = [NestedImportModule(module, import_node)] if not types: - return NO_CONTEXTS + return NO_VALUES if from_import_name is not None: types = unite( @@ -279,7 +279,7 @@ class Importer(object): def follow(self): if not self.import_path or not self._infer_possible: - return NO_CONTEXTS + return NO_VALUES import_names = tuple( force_unicode(i.value if isinstance(i, tree.Name) else i) @@ -299,7 +299,7 @@ class Importer(object): if not value_set: message = 'No module named ' + '.'.join(import_names) _add_error(self.module_value, name, message) - return NO_CONTEXTS + return NO_VALUES return value_set def _get_module_names(self, search_path=None, in_module=None): @@ -381,7 +381,7 @@ def import_module(infer_state, import_names, parent_module_value, sys_path): if import_names[0] in settings.auto_import_modules: module = _load_builtin_module(infer_state, import_names, sys_path) if module is None: - return NO_CONTEXTS + return NO_VALUES return ContextSet([module]) module_name = '.'.join(import_names) @@ -395,13 +395,13 @@ def import_module(infer_state, import_names, parent_module_value, sys_path): is_global_search=True, ) if is_pkg is None: - return NO_CONTEXTS + return NO_VALUES else: try: method = parent_module_value.py__path__ except AttributeError: # The module is not a package. - return NO_CONTEXTS + return NO_VALUES else: paths = method() for path in paths: @@ -418,7 +418,7 @@ def import_module(infer_state, import_names, parent_module_value, sys_path): if is_pkg is not None: break else: - return NO_CONTEXTS + return NO_VALUES if isinstance(file_io_or_ns, ImplicitNSInfo): from jedi.inference.value.namespace import ImplicitNamespaceContext @@ -430,7 +430,7 @@ def import_module(infer_state, import_names, parent_module_value, sys_path): elif file_io_or_ns is None: module = _load_builtin_module(infer_state, import_names, sys_path) if module is None: - return NO_CONTEXTS + return NO_VALUES else: module = _load_python_module( infer_state, file_io_or_ns, sys_path, diff --git a/jedi/inference/lazy_value.py b/jedi/inference/lazy_value.py index 18c35725..2f85ffdb 100644 --- a/jedi/inference/lazy_value.py +++ b/jedi/inference/lazy_value.py @@ -1,4 +1,4 @@ -from jedi.inference.base_value import ContextSet, NO_CONTEXTS +from jedi.inference.base_value import ContextSet, NO_VALUES from jedi.common.utils import monkeypatch @@ -30,7 +30,7 @@ class LazyUnknownContext(AbstractLazyContext): super(LazyUnknownContext, self).__init__(None) def infer(self): - return NO_CONTEXTS + return NO_VALUES class LazyTreeContext(AbstractLazyContext): diff --git a/jedi/inference/names.py b/jedi/inference/names.py index 2cbdb636..6150d0fd 100644 --- a/jedi/inference/names.py +++ b/jedi/inference/names.py @@ -3,7 +3,7 @@ from abc import abstractmethod from parso.tree import search_ancestor from jedi._compatibility import Parameter -from jedi.inference.base_value import ContextSet, NO_CONTEXTS +from jedi.inference.base_value import ContextSet, NO_VALUES from jedi.cache import memoize_method @@ -72,7 +72,7 @@ class AbstractArbitraryName(AbstractNameDefinition): self.parent_value = infer_state.builtins_module def infer(self): - return NO_CONTEXTS + return NO_VALUES class AbstractTreeName(AbstractNameDefinition): @@ -240,7 +240,7 @@ class ParamName(BaseTreeParamName): def infer_annotation(self, execute_annotation=True): node = self.annotation_node if node is None: - return NO_CONTEXTS + return NO_VALUES values = self.parent_value.parent_value.infer_node(node) if execute_annotation: values = values.execute_annotation() @@ -249,7 +249,7 @@ class ParamName(BaseTreeParamName): def infer_default(self): node = self.default_node if node is None: - return NO_CONTEXTS + return NO_VALUES return self.parent_value.parent_value.infer_node(node) @property diff --git a/jedi/inference/recursion.py b/jedi/inference/recursion.py index abf46afa..1d40dfd8 100644 --- a/jedi/inference/recursion.py +++ b/jedi/inference/recursion.py @@ -29,7 +29,7 @@ therefore the quality might not always be maximal. from contextlib import contextmanager from jedi import debug -from jedi.inference.base_value import NO_CONTEXTS +from jedi.inference.base_value import NO_VALUES recursion_limit = 15 @@ -75,7 +75,7 @@ def execution_allowed(infer_state, node): pushed_nodes.pop() -def execution_recursion_decorator(default=NO_CONTEXTS): +def execution_recursion_decorator(default=NO_VALUES): def decorator(func): def wrapper(self, **kwargs): detector = self.infer_state.execution_recursion_detector diff --git a/jedi/inference/syntax_tree.py b/jedi/inference/syntax_tree.py index 0f5e7628..6a4b2c41 100644 --- a/jedi/inference/syntax_tree.py +++ b/jedi/inference/syntax_tree.py @@ -8,7 +8,7 @@ from parso.python import tree from jedi._compatibility import force_unicode, unicode from jedi import debug from jedi import parser_utils -from jedi.inference.base_value import ContextSet, NO_CONTEXTS, ContextualizedNode, \ +from jedi.inference.base_value import ContextSet, NO_VALUES, ContextualizedNode, \ ContextualizedName, iterator_to_value_set, iterate_values from jedi.inference.lazy_value import LazyTreeContext from jedi.inference import compiled @@ -46,7 +46,7 @@ def _limit_value_infers(func): infer_state.inferred_element_counts[n] += 1 if infer_state.inferred_element_counts[n] > 300: debug.warning('In value %s there were too many inferences.', n) - return NO_CONTEXTS + return NO_VALUES except KeyError: infer_state.inferred_element_counts[n] = 1 return func(value, *args, **kwargs) @@ -55,7 +55,7 @@ def _limit_value_infers(func): def _py__stop_iteration_returns(generators): - results = NO_CONTEXTS + results = NO_VALUES for generator in generators: try: method = generator.py__stop_iteration_returns @@ -143,7 +143,7 @@ def infer_node(value, element): return generators.py__stop_iteration_returns() # Generator.send() is not implemented. - return NO_CONTEXTS + return NO_VALUES elif typ == 'namedexpr_test': return infer_node(value, element.children[2]) else: @@ -210,11 +210,11 @@ def infer_atom(value, atom): return ContextSet([compiled.builtin_from_name(value.infer_state, atom.value)]) elif atom.value == 'print': # print e.g. could be inferred like this in Python 2.7 - return NO_CONTEXTS + return NO_VALUES elif atom.value == 'yield': # Contrary to yield from, yield can just appear alone to return a # value when used with `.send()`. - return NO_CONTEXTS + return NO_VALUES assert False, 'Cannot infer the keyword %s' % atom elif isinstance(atom, tree.Literal): @@ -287,7 +287,7 @@ def infer_expr_stmt(value, stmt, seek_name=None): if allowed: return _infer_expr_stmt(value, stmt, seek_name) - return NO_CONTEXTS + return NO_VALUES @debug.increase_indent @@ -385,7 +385,7 @@ def infer_factor(value_set, operator): def _literals_to_types(infer_state, result): # Changes literals ('a', 1, 1.0, etc) to its type instances (str(), # int(), float(), etc). - new_result = NO_CONTEXTS + new_result = NO_VALUES for typ in result: if is_literal(typ): # Literals are only valid as long as the operations are @@ -400,7 +400,7 @@ def _literals_to_types(infer_state, result): def _infer_comparison(infer_state, value, left_values, operator, right_values): if not left_values or not right_values: # illegal slices e.g. cause left/right_result to be None - result = (left_values or NO_CONTEXTS) | (right_values or NO_CONTEXTS) + result = (left_values or NO_VALUES) | (right_values or NO_VALUES) return _literals_to_types(infer_state, result) else: # I don't think there's a reasonable chance that a string @@ -512,7 +512,7 @@ def _infer_comparison_part(infer_state, value, left, operator, right): return ContextSet([_bool_to_value(infer_state, True), _bool_to_value(infer_state, False)]) elif str_operator == 'in': - return NO_CONTEXTS + return NO_VALUES def check(obj): """Checks if a Jedi object is either a float or an int.""" @@ -548,7 +548,7 @@ def _remove_statements(infer_state, value, stmt, name): @plugin_manager.decorate() def tree_name_to_values(infer_state, value, tree_name): - value_set = NO_CONTEXTS + value_set = NO_VALUES module_node = value.get_root_value().tree_node # First check for annotations, like: `foo: int = 3` if module_node is not None: @@ -620,7 +620,7 @@ def tree_name_to_values(infer_state, value, tree_name): exceptions = value.infer_node(tree_name.get_previous_sibling().get_previous_sibling()) types = exceptions.execute_with_values() elif node.type == 'param': - types = NO_CONTEXTS + types = NO_VALUES else: raise ValueError("Should not happen. type: %s" % typ) return types @@ -684,7 +684,7 @@ def check_tuple_assignments(infer_state, valueualized_name, value_set): iterated = value_set.iterate(cn) if isinstance(index, slice): # For no star unpacking is not possible. - return NO_CONTEXTS + return NO_VALUES for _ in range(index + 1): try: lazy_value = next(iterated) @@ -693,7 +693,7 @@ def check_tuple_assignments(infer_state, valueualized_name, value_set): # would allow this loop to run for a very long time if the # index number is high. Therefore break if the loop is # finished. - return NO_CONTEXTS + return NO_VALUES value_set = lazy_value.infer() return value_set diff --git a/jedi/inference/value/function.py b/jedi/inference/value/function.py index 1d907a2b..eafe50d9 100644 --- a/jedi/inference/value/function.py +++ b/jedi/inference/value/function.py @@ -12,7 +12,7 @@ from jedi.inference.signature import TreeSignature from jedi.inference.arguments import AnonymousArguments from jedi.inference.filters import ParserTreeFilter, FunctionExecutionFilter from jedi.inference.names import ContextName, AbstractNameDefinition, ParamName -from jedi.inference.base_value import ContextualizedNode, NO_CONTEXTS, \ +from jedi.inference.base_value import ContextualizedNode, NO_VALUES, \ ContextSet, TreeContext, ContextWrapper from jedi.inference.lazy_value import LazyKnownContexts, LazyKnownContext, \ LazyTreeContext @@ -180,7 +180,7 @@ class FunctionExecutionContext(TreeContext): self.function_value = function_value self.var_args = var_args - @infer_state_method_cache(default=NO_CONTEXTS) + @infer_state_method_cache(default=NO_VALUES) @recursion.execution_recursion_decorator() def get_return_values(self, check_yields=False): funcdef = self.tree_node @@ -188,7 +188,7 @@ class FunctionExecutionContext(TreeContext): return self.infer_node(funcdef.children[-1]) if check_yields: - value_set = NO_CONTEXTS + value_set = NO_VALUES returns = get_yield_exprs(self.infer_state, funcdef) else: returns = funcdef.iter_return_stmts() @@ -331,13 +331,13 @@ class FunctionExecutionContext(TreeContext): if is_coroutine: if is_generator: if infer_state.environment.version_info < (3, 6): - return NO_CONTEXTS + return NO_VALUES async_generator_classes = infer_state.typing_module \ .py__getattribute__('AsyncGenerator') yield_values = self.merge_yield_values(is_async=True) # The contravariant doesn't seem to be defined. - generics = (yield_values.py__class__(), NO_CONTEXTS) + generics = (yield_values.py__class__(), NO_VALUES) return ContextSet( # In Python 3.6 AsyncGenerator is still a class. GenericClass(c, generics) @@ -345,11 +345,11 @@ class FunctionExecutionContext(TreeContext): ).execute_annotation() else: if infer_state.environment.version_info < (3, 5): - return NO_CONTEXTS + return NO_VALUES async_classes = infer_state.typing_module.py__getattribute__('Coroutine') return_values = self.get_return_values() # Only the first generic is relevant. - generics = (return_values.py__class__(), NO_CONTEXTS, NO_CONTEXTS) + generics = (return_values.py__class__(), NO_VALUES, NO_VALUES) return ContextSet( GenericClass(c, generics) for c in async_classes ).execute_annotation() @@ -368,7 +368,7 @@ class OverloadedFunctionContext(FunctionMixin, ContextWrapper): def py__call__(self, arguments): debug.dbg("Execute overloaded function %s", self._wrapped_value, color='BLUE') function_executions = [] - value_set = NO_CONTEXTS + value_set = NO_VALUES matched = False for f in self._overloaded_functions: function_execution = f.get_function_execution(arguments) @@ -382,7 +382,7 @@ class OverloadedFunctionContext(FunctionMixin, ContextWrapper): if self.infer_state.is_analysis: # In this case we want precision. - return NO_CONTEXTS + return NO_VALUES return ContextSet.from_sets(fe.infer() for fe in function_executions) def get_signature_functions(self): diff --git a/jedi/inference/value/instance.py b/jedi/inference/value/instance.py index 91dc4450..a06b62c7 100644 --- a/jedi/inference/value/instance.py +++ b/jedi/inference/value/instance.py @@ -7,7 +7,7 @@ from jedi.inference.compiled.value import CompiledObjectFilter from jedi.inference.helpers import values_from_qualified_names from jedi.inference.filters import AbstractFilter from jedi.inference.names import ContextName, TreeNameDefinition -from jedi.inference.base_value import Context, NO_CONTEXTS, ContextSet, \ +from jedi.inference.base_value import Context, NO_VALUES, ContextSet, \ iterator_to_value_set, ContextWrapper from jedi.inference.lazy_value import LazyKnownContext, LazyKnownContexts from jedi.inference.cache import infer_state_method_cache @@ -249,7 +249,7 @@ class CompiledInstance(AbstractInstanceContext): def get_first_non_keyword_argument_values(self): key, lazy_value = next(self._original_var_args.unpack(), ('', None)) if key is not None: - return NO_CONTEXTS + return NO_VALUES return lazy_value.infer() diff --git a/jedi/inference/value/iterable.py b/jedi/inference/value/iterable.py index 5c23baec..4f11b637 100644 --- a/jedi/inference/value/iterable.py +++ b/jedi/inference/value/iterable.py @@ -37,7 +37,7 @@ from jedi.inference.utils import safe_property, to_list from jedi.inference.cache import infer_state_method_cache from jedi.inference.filters import ParserTreeFilter, LazyAttributeOverwrite, \ publish_method -from jedi.inference.base_value import ContextSet, Context, NO_CONTEXTS, \ +from jedi.inference.base_value import ContextSet, Context, NO_VALUES, \ TreeContext, ContextualizedNode, iterate_values, HelperContextMixin, _sentinel from jedi.parser_utils import get_sync_comp_fors @@ -381,7 +381,7 @@ class SequenceLiteralContext(Sequence): """ if self.array_type == u'dict': # Get keys. - types = NO_CONTEXTS + types = NO_VALUES for k, _ in self.get_tree_entries(): types |= self._defining_value.infer_node(k) # We don't know which dict index comes first, therefore always @@ -652,12 +652,12 @@ def check_array_additions(value, sequence): """ Just a mapper function for the internal _check_array_additions """ if sequence.array_type not in ('list', 'set'): # TODO also check for dict updates - return NO_CONTEXTS + return NO_VALUES return _check_array_additions(value, sequence) -@infer_state_method_cache(default=NO_CONTEXTS) +@infer_state_method_cache(default=NO_VALUES) @debug.increase_indent def _check_array_additions(value, sequence): """ @@ -672,7 +672,7 @@ def _check_array_additions(value, sequence): module_value = value.get_root_value() if not settings.dynamic_array_additions or isinstance(module_value, compiled.CompiledObject): debug.dbg('Dynamic array search aborted.', color='MAGENTA') - return NO_CONTEXTS + return NO_VALUES def find_additions(value, arglist, add_name): params = list(arguments.TreeArguments(value.infer_state, value, arglist).unpack()) diff --git a/jedi/inference/value/klass.py b/jedi/inference/value/klass.py index aaf85439..45ab3a66 100644 --- a/jedi/inference/value/klass.py +++ b/jedi/inference/value/klass.py @@ -47,7 +47,7 @@ from jedi.inference.filters import ParserTreeFilter from jedi.inference.names import TreeNameDefinition, ContextName from jedi.inference.arguments import unpack_arglist, ValuesArguments from jedi.inference.base_value import ContextSet, iterator_to_value_set, \ - NO_CONTEXTS + NO_VALUES from jedi.inference.value.function import FunctionAndClassBase from jedi.plugins import plugin_manager @@ -307,7 +307,7 @@ class ClassContext(use_metaclass(CachedMetaClass, ClassMixin, FunctionAndClassBa a different type var name. """ for type_var in self.list_type_vars(): - yield type_var_dict.get(type_var.py__name__(), NO_CONTEXTS) + yield type_var_dict.get(type_var.py__name__(), NO_VALUES) if type_var_dict: return ContextSet([GenericClass( @@ -321,7 +321,7 @@ class ClassContext(use_metaclass(CachedMetaClass, ClassMixin, FunctionAndClassBa debug.dbg('Unprocessed metaclass %s', metaclass) return [] - @infer_state_method_cache(default=NO_CONTEXTS) + @infer_state_method_cache(default=NO_VALUES) def get_metaclasses(self): args = self._get_bases_arguments() if args is not None: @@ -337,4 +337,4 @@ class ClassContext(use_metaclass(CachedMetaClass, ClassMixin, FunctionAndClassBa values = value.get_metaclasses() if values: return values - return NO_CONTEXTS + return NO_VALUES diff --git a/jedi/plugins/stdlib.py b/jedi/plugins/stdlib.py index e3d3af1d..b1fa7eb8 100644 --- a/jedi/plugins/stdlib.py +++ b/jedi/plugins/stdlib.py @@ -22,7 +22,7 @@ from jedi.inference import analysis from jedi.inference import compiled from jedi.inference.value.instance import BoundMethod, InstanceArguments from jedi.inference.base_value import ContextualizedNode, \ - NO_CONTEXTS, ContextSet, ContextWrapper, LazyContextWrapper + NO_VALUES, ContextSet, ContextWrapper, LazyContextWrapper from jedi.inference.value import ClassContext, ModuleContext, \ FunctionExecutionContext from jedi.inference.value.klass import ClassMixin @@ -152,7 +152,7 @@ def _follow_param(infer_state, arguments, index): try: key, lazy_value = list(arguments.unpack())[index] except IndexError: - return NO_CONTEXTS + return NO_VALUES else: return lazy_value.infer() @@ -172,7 +172,7 @@ def argument_clinic(string, want_obj=False, want_value=False, callback = kwargs.pop('callback') assert not kwargs # Python 2... debug.dbg('builtin start %s' % obj, color='MAGENTA') - result = NO_CONTEXTS + result = NO_VALUES if want_value: kwargs['value'] = arguments.value if want_obj: @@ -197,7 +197,7 @@ def builtins_property(objects, types, obj, arguments): key, lazy_value = next(property_args, (None, None)) if key is not None or lazy_value is None: debug.warning('property expected a first param, not %s', arguments) - return NO_CONTEXTS + return NO_VALUES return lazy_value.infer().py__call__(arguments=ValuesArguments([objects])) @@ -231,14 +231,14 @@ def builtins_getattr(objects, names, defaults=None): continue else: return obj.py__getattribute__(force_unicode(string)) - return NO_CONTEXTS + return NO_VALUES @argument_clinic('object[, bases, dict], /') def builtins_type(objects, bases, dicts): if bases or dicts: # It's a type creation... maybe someday... - return NO_CONTEXTS + return NO_VALUES else: return objects.py__class__() @@ -276,7 +276,7 @@ def builtins_super(types, objects, value): # class, it can be an anecestor from long ago. return ContextSet({SuperInstance(instance.infer_state, instance)}) - return NO_CONTEXTS + return NO_VALUES class ReversedObject(AttributeOverwrite): @@ -443,7 +443,7 @@ def collections_namedtuple(obj, arguments, callback): # TODO here we only use one of the types, we should use all. param_values = _follow_param(infer_state, arguments, 1) if not param_values: - return NO_CONTEXTS + return NO_VALUES _fields = list(param_values)[0] string = get_str_or_none(_fields) if string is not None: @@ -456,7 +456,7 @@ def collections_namedtuple(obj, arguments, callback): ] fields = [f for f in fields if f is not None] else: - return NO_CONTEXTS + return NO_VALUES # Build source code code = _NAMEDTUPLE_CLASS_TEMPLATE.format( @@ -515,7 +515,7 @@ class PartialObject(object): def py__call__(self, arguments): func = self._get_function(self._arguments.unpack()) if func is None: - return NO_CONTEXTS + return NO_VALUES return func.execute( MergedPartialArguments(self._arguments, arguments) @@ -576,7 +576,7 @@ def _dataclass(obj, arguments, callback): return ContextSet([DataclassWrapper(c)]) else: return ContextSet([obj]) - return NO_CONTEXTS + return NO_VALUES class DataclassWrapper(ContextWrapper, ClassMixin): @@ -625,7 +625,7 @@ class DataclassParamName(BaseTreeParamName): def infer(self): if self.annotation_node is None: - return NO_CONTEXTS + return NO_VALUES else: return self.parent_value.infer_node(self.annotation_node) @@ -637,7 +637,7 @@ class ItemGetterCallable(ContextWrapper): @repack_with_argument_clinic('item, /') def py__call__(self, item_value_set): - value_set = NO_CONTEXTS + value_set = NO_VALUES for args_value in self._args_value_set: lazy_values = list(args_value.py__iter__()) if len(lazy_values) == 1: @@ -745,8 +745,8 @@ _implemented = { 'deepcopy': _return_first_param, }, 'json': { - 'load': lambda obj, arguments, callback: NO_CONTEXTS, - 'loads': lambda obj, arguments, callback: NO_CONTEXTS, + 'load': lambda obj, arguments, callback: NO_VALUES, + 'loads': lambda obj, arguments, callback: NO_VALUES, }, 'collections': { 'namedtuple': collections_namedtuple, @@ -773,7 +773,7 @@ _implemented = { # The _alias function just leads to some annoying type inference. # Therefore, just make it return nothing, which leads to the stubs # being used instead. This only matters for 3.7+. - '_alias': lambda obj, arguments, callback: NO_CONTEXTS, + '_alias': lambda obj, arguments, callback: NO_VALUES, }, 'dataclasses': { # For now this works at least better than Jedi trying to understand it.