diff --git a/jedi/inference/gradual/typing.py b/jedi/inference/gradual/typing.py index c8f64db9..d42dff58 100644 --- a/jedi/inference/gradual/typing.py +++ b/jedi/inference/gradual/typing.py @@ -286,7 +286,7 @@ class TypeAlias(LazyValueWrapper): return cls -class _ContainerBase(_WithIndexBase): +class _GetItemMixin(object): def _get_getitem_values(self, index): args = _iter_over_arguments(self._index_value, self._context_of_index) for i, values in enumerate(args): @@ -297,13 +297,19 @@ class _ContainerBase(_WithIndexBase): return NO_VALUES -class Callable(_ContainerBase): +class Callable(_WithIndexBase, _GetItemMixin): def py__call__(self, arguments): # The 0th index are the arguments. return self._get_getitem_values(1).execute_annotation() -class Tuple(_ContainerBase): +class Tuple(LazyValueWrapper, _GetItemMixin): + def __init__(self, inference_state, parent_context, name, index_value, value_of_index): + self.inference_state = inference_state + self.parent_context = parent_context + self._index_value = index_value + self._context_of_index = value_of_index + def _is_homogenous(self): # To specify a variable-length tuple of homogeneous type, Tuple[T, ...] # is used. @@ -339,12 +345,17 @@ class Tuple(_ContainerBase): _iter_over_arguments(self._index_value, self._context_of_index) ).execute_annotation() + def _get_wrapped_value(self): + tuple_, = self.inference_state.builtins_module \ + .py__getattribute__('tuple').execute_annotation() + return tuple_ -class Generic(_ContainerBase): + +class Generic(_WithIndexBase, _GetItemMixin): pass -class Protocol(_ContainerBase): +class Protocol(_WithIndexBase, _GetItemMixin): pass diff --git a/test/completion/pep0484_typing.py b/test/completion/pep0484_typing.py index 9d2cbd83..adb2a30e 100644 --- a/test/completion/pep0484_typing.py +++ b/test/completion/pep0484_typing.py @@ -99,6 +99,8 @@ def tuple(p, q, r): """ #? int() p[0] + #? ['index'] + p.index #? int() q[0] #? str()