1
0
forked from VimPlug/jedi

Refactor so typing uses BaseTypingValueWithGenerics

This makes it finally possible to use type vars with Callable and some other classes.
Fixes #1413
This commit is contained in:
Dave Halter
2019-12-08 23:50:46 +01:00
parent 7319f8bf2c
commit 5acbb06315
3 changed files with 81 additions and 60 deletions
+14 -21
View File
@@ -15,7 +15,7 @@ from jedi.inference.arguments import repack_with_argument_clinic
from jedi.inference.filters import FilterWrapper
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.base import BaseTypingValue, BaseTypingValueWithGenerics
from jedi.inference.gradual.type_var import TypeVarClass
from jedi.inference.gradual.generics import LazyGenericManager
@@ -97,20 +97,7 @@ class TypingModuleFilterWrapper(FilterWrapper):
name_wrapper_class = TypingModuleName
class _WithIndexBase(BaseTypingValue):
def __init__(self, inference_state, parent_context, name, generics_manager):
super(_WithIndexBase, self).__init__(inference_state, parent_context, name)
self._generics_manager = generics_manager
def __repr__(self):
return '<%s: %s[%s]>' % (
self.__class__.__name__,
self._tree_name.value,
self._generics_manager,
)
class TypingValueWithIndex(_WithIndexBase):
class TypingValueWithIndex(BaseTypingValueWithGenerics):
def execute_annotation(self):
string_name = self._tree_name.value
@@ -132,7 +119,6 @@ class TypingValueWithIndex(_WithIndexBase):
cls = globals()[string_name]
return ValueSet([cls(
self.inference_state,
self.parent_context,
self._tree_name,
generics_manager=self._generics_manager,
@@ -141,6 +127,13 @@ class TypingValueWithIndex(_WithIndexBase):
def gather_annotation_classes(self):
return ValueSet.from_sets(self._generics_manager.to_tuple())
def _create_instance_with_generics(self, generics_manager):
return TypingValueWithIndex(
self.parent_context,
self._tree_name,
generics_manager
)
class ProxyTypingValue(BaseTypingValue):
index_class = TypingValueWithIndex
@@ -219,15 +212,15 @@ class TypeAlias(LazyValueWrapper):
return cls
class Callable(_WithIndexBase):
class Callable(BaseTypingValueWithGenerics):
def py__call__(self, arguments):
# The 0th index are the arguments.
return self._generics_manager.get_index_and_execute(1)
class Tuple(LazyValueWrapper):
def __init__(self, inference_state, parent_context, name, generics_manager):
self.inference_state = inference_state
def __init__(self, parent_context, name, generics_manager):
self.inference_state = parent_context.inference_state
self.parent_context = parent_context
self._generics_manager = generics_manager
@@ -267,11 +260,11 @@ class Tuple(LazyValueWrapper):
return tuple_
class Generic(_WithIndexBase):
class Generic(BaseTypingValueWithGenerics):
pass
class Protocol(_WithIndexBase):
class Protocol(BaseTypingValueWithGenerics):
pass