fix: incorrect suggestions generated by manual_retain
lint
#12084
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.
fixes #10393, fixes #11457, fixes #12081
#10393: In the current implementation of
manual_retain
, if the argument to the closure is matched using tuple, they are all treated as the result of a call tomap.into_iter().filter(<f>)
. However, such tuple pattern matching can also occur in many different containers that stores tuples internally. The correct approach is to apply different lint policies depending on whether the receiver ofinto_iter
is a map or not.#11457 and #12081: In the current implementation of
manual_retain
, if the argument to the closure isBinding
, the closure will be used directly in theretain
method, which will result in incorrect suggestion because the first argument to theretain
closure may be of a different type. In addition, if the argument to the closure isRef + Binding
, the lint will simply remove theRef
part and use theBinding
part as the argument to the new closure, which will lead to bad suggestion for the same reason. The correct approach is to detect each of these cases and apply lint suggestions conservatively.changelog: [
manual_retain
] refactor and add check for various patterns