diff --git a/mypy/semanal.py b/mypy/semanal.py index fbef499dd91da..6beb967b68058 100644 --- a/mypy/semanal.py +++ b/mypy/semanal.py @@ -2871,7 +2871,7 @@ def analyze_name_lvalue(self, outer = self.is_global_or_nonlocal(name) if kind == MDEF and isinstance(self.type, TypeInfo) and self.type.is_enum: # Special case: we need to be sure that `Enum` keys are unique. - if existing: + if existing is not None and not isinstance(existing.node, PlaceholderNode): self.fail('Attempted to reuse member name "{}" in Enum definition "{}"'.format( name, self.type.name, ), lvalue) diff --git a/test-data/unit/check-enum.test b/test-data/unit/check-enum.test index 8d3620b1b71e4..aac97c6c69af2 100644 --- a/test-data/unit/check-enum.test +++ b/test-data/unit/check-enum.test @@ -1810,4 +1810,4 @@ reveal_type(A.str.value) # N: Revealed type is "Literal['foo']?" reveal_type(A.int.value) # N: Revealed type is "Literal[1]?" reveal_type(A.bool.value) # N: Revealed type is "Literal[False]?" reveal_type(A.tuple.value) # N: Revealed type is "Tuple[Literal[1]?]" -[builtins fixtures/tuple.pyi] \ No newline at end of file +[builtins fixtures/tuple.pyi] diff --git a/test-data/unit/pythoneval.test b/test-data/unit/pythoneval.test index 9bf511e1aba3c..ab1593dac7541 100644 --- a/test-data/unit/pythoneval.test +++ b/test-data/unit/pythoneval.test @@ -1573,3 +1573,15 @@ x: OrderedDict[str, str] = OrderedDict({}) reveal_type(x) # Revealed type is "collections.OrderedDict[builtins.str, builtins.int]" [out] _testTypingExtensionsOrderedDictAlias.py:3: note: Revealed type is "collections.OrderedDict[builtins.str, builtins.str]" + +[case testEnumValueWithPlaceholderNodeType] +# https://github.com/python/mypy/issues/11971 +from enum import Enum +from typing import Callable, Dict +class Foo(Enum): + Bar: Foo = Callable[[str], None] + Baz: Foo = Callable[[Dict[str, "Missing"]], None] +[out] +_testEnumValueWithPlaceholderNodeType.py:5: error: Incompatible types in assignment (expression has type "object", variable has type "Foo") +_testEnumValueWithPlaceholderNodeType.py:6: error: Incompatible types in assignment (expression has type "object", variable has type "Foo") +_testEnumValueWithPlaceholderNodeType.py:6: error: Name "Missing" is not defined