Preserve can_be_true and can_be_false when copying types #7991
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request modifies the
last_known_value
eraser so it always copies over the previously inferred value of thecan_be_true
andcan_be_false
fields.This isn't entirely typesafe -- for example, we can sometimes accidentally infer the wrong result if we try reassigning variables or call a mutating function :
But this was apparently the old behavior/something mypy wasn't previously able to detect, so I guess this is fine for now.
I also decided against modifying every
copy_modified
method in all the type classes because of this reason: I wanted to limit the spread of this potentially misleading additional inferred info.Fixes #7986, probably.