diff --git a/jedi/inference/gradual/base.py b/jedi/inference/gradual/base.py index 44566817..eb481643 100644 --- a/jedi/inference/gradual/base.py +++ b/jedi/inference/gradual/base.py @@ -3,35 +3,11 @@ from jedi.inference.base_value import ValueSet, NO_VALUES, Value, \ iterator_to_value_set, LazyValueWrapper, ValueWrapper from jedi.inference.compiled import builtin_from_name from jedi.inference.value.klass import ClassFilter -from jedi.inference.value.iterable import SequenceLiteralValue from jedi.inference.value.klass import ClassMixin from jedi.inference.utils import to_list from jedi.inference.names import AbstractNameDefinition, ValueName from jedi.inference.context import ClassContext -from jedi.inference.helpers import is_string - - -def iter_over_arguments(maybe_tuple_value, defining_context): - def iterate(): - if isinstance(maybe_tuple_value, SequenceLiteralValue): - for lazy_value in maybe_tuple_value.py__iter__(contextualized_node=None): - yield lazy_value.infer() - else: - yield ValueSet([maybe_tuple_value]) - - def resolve_forward_references(value_set): - for value in value_set: - if is_string(value): - from jedi.inference.gradual.annotation import _get_forward_reference_node - node = _get_forward_reference_node(defining_context, value.get_safe_value()) - if node is not None: - for c in defining_context.infer_node(node): - yield c - else: - yield value - - for value_set in iterate(): - yield ValueSet(resolve_forward_references(value_set)) +from jedi.inference.gradual.generics import iter_over_arguments class BaseTypingValue(Value): diff --git a/jedi/inference/gradual/generics.py b/jedi/inference/gradual/generics.py new file mode 100644 index 00000000..07d47274 --- /dev/null +++ b/jedi/inference/gradual/generics.py @@ -0,0 +1,27 @@ +from jedi.inference.base_value import ValueSet, Value, \ + iterator_to_value_set, LazyValueWrapper, ValueWrapper +from jedi.inference.value.iterable import SequenceLiteralValue +from jedi.inference.helpers import is_string + + +def iter_over_arguments(maybe_tuple_value, defining_context): + def iterate(): + if isinstance(maybe_tuple_value, SequenceLiteralValue): + for lazy_value in maybe_tuple_value.py__iter__(contextualized_node=None): + yield lazy_value.infer() + else: + yield ValueSet([maybe_tuple_value]) + + def resolve_forward_references(value_set): + for value in value_set: + if is_string(value): + from jedi.inference.gradual.annotation import _get_forward_reference_node + node = _get_forward_reference_node(defining_context, value.get_safe_value()) + if node is not None: + for c in defining_context.infer_node(node): + yield c + else: + yield value + + for value_set in iterate(): + yield ValueSet(resolve_forward_references(value_set)) diff --git a/jedi/inference/gradual/typing.py b/jedi/inference/gradual/typing.py index 802ccee7..a586e86b 100644 --- a/jedi/inference/gradual/typing.py +++ b/jedi/inference/gradual/typing.py @@ -18,7 +18,7 @@ from jedi.inference.names import NameWrapper, ValueName from jedi.inference.value.klass import ClassMixin from jedi.inference.gradual.base import BaseTypingValue from jedi.inference.gradual.type_var import TypeVarClass -from jedi.inference.gradual.base import iter_over_arguments +from jedi.inference.gradual.generics import iter_over_arguments _PROXY_CLASS_TYPES = 'Tuple Generic Protocol Callable Type'.split() _TYPE_ALIAS_TYPES = {