@@ -181,27 +181,100 @@ def infer_truth(truth: Truth) -> None:
181
181
[case testEnumTruthyness]
182
182
# mypy: warn-unreachable
183
183
import enum
184
+ from typing_extensions import Literal
185
+
184
186
class 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
188
211
[builtins fixtures/tuple.pyi]
189
- [out]
190
- main:6: error: Statement is unreachable
191
212
192
213
[case testEnumTruthynessCustomDunderBool]
193
214
# mypy: warn-unreachable
194
215
import enum
195
216
from typing_extensions import Literal
217
+
196
218
class E(enum.Enum):
197
- x = 0
219
+ zero = 0
220
+ one = 1
198
221
def __bool__(self) -> Literal[False]:
199
222
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")
202
277
[builtins fixtures/enum.pyi]
203
- [out]
204
- main:9: error: Statement is unreachable
205
278
206
279
[case testEnumUnique]
207
280
import enum
0 commit comments