@@ -181,27 +181,100 @@ def infer_truth(truth: Truth) -> None:
181181[case testEnumTruthyness]
182182# mypy: warn-unreachable
183183import enum
184+ from typing_extensions import Literal
185+
184186class E(enum.Enum):
185- x = 0
186- if not E.x:
187- "noop"
187+ zero = 0
188+ one = 1
189+
190+ def print(s: str) -> None: ...
191+
192+ if E.zero:
193+ print("zero is true")
194+ if not E.zero:
195+ print("zero is false") # E: Statement is unreachable
196+
197+ if E.one:
198+ print("one is true")
199+ if not E.one:
200+ print("one is false") # E: Statement is unreachable
201+
202+ def main(zero: Literal[E.zero], one: Literal[E.one]) -> None:
203+ if zero:
204+ print("zero is true")
205+ if not zero:
206+ print("zero is false") # E: Statement is unreachable
207+ if one:
208+ print("one is true")
209+ if not one:
210+ print("one is false") # E: Statement is unreachable
188211[builtins fixtures/tuple.pyi]
189- [out]
190- main:6: error: Statement is unreachable
191212
192213[case testEnumTruthynessCustomDunderBool]
193214# mypy: warn-unreachable
194215import enum
195216from typing_extensions import Literal
217+
196218class E(enum.Enum):
197- x = 0
219+ zero = 0
220+ one = 1
198221 def __bool__(self) -> Literal[False]:
199222 return False
200- if E.x:
201- "noop"
223+
224+ def print(s: str) -> None: ...
225+
226+ if E.zero:
227+ print("zero is true") # E: Statement is unreachable
228+ if not E.zero:
229+ print("zero is false")
230+
231+ if E.one:
232+ print("one is true") # E: Statement is unreachable
233+ if not E.one:
234+ print("one is false")
235+
236+ def main(zero: Literal[E.zero], one: Literal[E.one]) -> None:
237+ if zero:
238+ print("zero is true") # E: Statement is unreachable
239+ if not zero:
240+ print("zero is false")
241+ if one:
242+ print("one is true") # E: Statement is unreachable
243+ if not one:
244+ print("one is false")
245+ [builtins fixtures/enum.pyi]
246+
247+ [case testEnumTruthynessStrEnum]
248+ # mypy: warn-unreachable
249+ import enum
250+ from typing_extensions import Literal
251+
252+ class E(enum.StrEnum):
253+ empty = ""
254+ not_empty = "asdf"
255+
256+ def print(s: str) -> None: ...
257+
258+ if E.empty:
259+ print("empty is true")
260+ if not E.empty:
261+ print("empty is false")
262+
263+ if E.not_empty:
264+ print("not_empty is true")
265+ if not E.not_empty:
266+ print("not_empty is false")
267+
268+ def main(empty: Literal[E.empty], not_empty: Literal[E.not_empty]) -> None:
269+ if empty:
270+ print("empty is true")
271+ if not empty:
272+ print("empty is false")
273+ if not_empty:
274+ print("not_empty is true")
275+ if not not_empty:
276+ print("not_empty is false")
202277[builtins fixtures/enum.pyi]
203- [out]
204- main:9: error: Statement is unreachable
205278
206279[case testEnumUnique]
207280import enum
0 commit comments