diff --git a/jedi/inference/gradual/typing.py b/jedi/inference/gradual/typing.py index be353391..e45e4f98 100644 --- a/jedi/inference/gradual/typing.py +++ b/jedi/inference/gradual/typing.py @@ -350,33 +350,6 @@ class TypedDictBase(BaseTypingValue): """ -class TypedDictClass(Value): - """ - This represents a class defined like: - - class Foo(TypedDict): - bar: str - """ - def __init__(self, definition_class): - super().__init__(definition_class.inference_state, definition_class.parent_context) - self.tree_node = definition_class.tree_node - self._definition_class = definition_class - - def get_filters(self, origin_scope=None): - """ - A TypedDict doesn't have attributes. - """ - o, = self.inference_state.builtins_module.py__getattribute__('object') - return o.get_filters() - - @property - def name(self): - return ValueName(self, self.tree_node.name) - - def py__call__(self, arguments): - return ValueSet({TypedDict(self._definition_class)}) - - class TypedDict(LazyValueWrapper): """Represents the instance version of ``TypedDictClass``.""" def __init__(self, definition_class): diff --git a/jedi/inference/syntax_tree.py b/jedi/inference/syntax_tree.py index bc902020..6411fc81 100644 --- a/jedi/inference/syntax_tree.py +++ b/jedi/inference/syntax_tree.py @@ -26,7 +26,6 @@ from jedi.inference.compiled.access import COMPARISON_OPERATORS from jedi.inference.cache import inference_state_method_cache from jedi.inference.gradual.stub_value import VersionInfo from jedi.inference.gradual import annotation -from jedi.inference.gradual.typing import TypedDictClass from jedi.inference.names import TreeNameDefinition from jedi.inference.context import CompForContext from jedi.inference.value.decorator import Decoratee @@ -749,8 +748,6 @@ def _apply_decorators(context, node): parent_context=context, tree_node=node ) - if decoratee_value.is_typeddict(): - decoratee_value = TypedDictClass(decoratee_value) else: decoratee_value = FunctionValue.from_context(context, node) initial = values = ValueSet([decoratee_value]) diff --git a/jedi/inference/value/klass.py b/jedi/inference/value/klass.py index 41c669d7..afefb481 100644 --- a/jedi/inference/value/klass.py +++ b/jedi/inference/value/klass.py @@ -133,6 +133,10 @@ class ClassMixin(object): def py__call__(self, arguments=None): from jedi.inference.value import TreeInstance + + from jedi.inference.gradual.typing import TypedDict + if self.is_typeddict(): + return ValueSet([TypedDict(self)]) return ValueSet([TreeInstance(self.inference_state, self.parent_context, self, arguments)]) def py__class__(self): diff --git a/test/completion/pep0484_typing.py b/test/completion/pep0484_typing.py index 382f75d0..ad3fc51f 100644 --- a/test/completion/pep0484_typing.py +++ b/test/completion/pep0484_typing.py @@ -558,6 +558,8 @@ d.foo Foo.set #? ['setdefault'] d.setdefaul +#? [] +Foo.setdefaul #? 5 ["'foo"] d['fo']