Uplift `clippy::{drop,forget}_{ref,copy}` lints by Urgau · Pull Request #109732...
source link: https://github.com/rust-lang/rust/pull/109732
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Contributor
This PR aims at uplifting the clippy::drop_ref
, clippy::drop_copy
, clippy::forget_ref
and clippy::forget_copy
lints.
Those lints are/were declared in the correctness category of clippy because they lint on useless and most probably is not what the developer wanted.
drop_ref
and forget_ref
The drop_ref
and forget_ref
lint checks for calls to std::mem::drop
or std::mem::forget
with a reference instead of an owned value.
Example
let mut lock_guard = mutex.lock();
std::mem::drop(&lock_guard) // Should have been drop(lock_guard), mutex
// still locked
operation_that_requires_mutex_to_be_unlocked();
Explanation
Calling drop
or forget
on a reference will only drop the reference itself, which is a no-op. It will not call the drop
or forget
method on the underlying referenced value, which is likely what was intended.
drop_copy
and forget_copy
The drop_copy
and forget_copy
lint checks for calls to std::mem::forget
or std::mem::drop
with a value that derives the Copy trait.
Example
let x: i32 = 42; // i32 implements Copy
std::mem::forget(x) // A copy of x is passed to the function, leaving the
// original unaffected
Explanation
Calling std::mem::forget
does nothing for types that implement Copy since the value will be copied and moved into the function on invocation.
Followed the instructions for uplift a clippy describe here: #99696 (review)
cc @m-ou-se (as T-libs-api leader because the uplifting was discussed in a recent meeting)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK