It appears to me that mypy could process case bodies following an always true pattern.
I noticed that reachability.py function infer_reachability_of_match_statement has the following:
line 76...
if pattern_value in (ALWAYS_FALSE, MYPY_FALSE) \
or guard_value in (ALWAYS_FALSE, MYPY_FALSE):
# The case is considered always false, so we skip the case body.
mark_block_unreachable(s.bodies[i])
elif pattern_value in (ALWAYS_FALSE, MYPY_TRUE) \
^^^^^^^^^^^^
and guard_value in (ALWAYS_TRUE, MYPY_TRUE):
for body in s.bodies[i + 1:]:
mark_block_unreachable(body)
I would think that this ALWAYS_FALSE should be ALWAYS_TRUE, because you are determining whether the case [i] is always executed, so that the following cases are never executed.
Also, FWIW, pattern_value can never be ALWAYS_FALSE. It is either ALWAYS_TRUE or TRUTH_VALUE_UNKNOWN.
Please review this. If you determine that the code is correct, then please explain why, and then you can remove the (bug) label and close this issue. Otherwise, please make the indicated change.
Thanks.
Your Environment
It appears to me that mypy could process case bodies following an always true pattern.
I noticed that
reachability.pyfunctioninfer_reachability_of_match_statementhas the following:I would think that this
ALWAYS_FALSEshould beALWAYS_TRUE, because you are determining whether the case[i]is always executed, so that the following cases are never executed.Also, FWIW,
pattern_valuecan never beALWAYS_FALSE. It is eitherALWAYS_TRUEorTRUTH_VALUE_UNKNOWN.Please review this. If you determine that the code is correct, then please explain why, and then you can remove the (bug) label and close this issue. Otherwise, please make the indicated change.
Thanks.
Your Environment