Implement basic control flow checks for consider-using-with
#4929
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.
doc/whatsnew/<current release.rst>
.Type of Changes
Description
The checker keeps track of context managers that have been assigned to a variable to see if they are later on used in a
with
block.If a variable is reassigned before it is used in a
with
, the message will trigger (as intended).However, the logic to check that was pretty basic, and did not handle cases where e.g. the variable is assigned inside two separate branches of control flow, like in if-else statements or try-except constructs.
This MR solves this.
As the logic to determine if two nodes are in different branches of control flow might be useful in other places as well, I put the method inside thepylint.checkers.utils
module.Closes #4751