[std::mem]::[drop]
, a convenience function for explicitly
//! dropping a value.
+//! * [std::mem]::[replace]
, a convenience function for replacing
+//! one value with another while returning the previous value.
+//! * [std::mem]::[take]
, a convenience function for replacing a
+//! value with the default value for its type while returning the previous
+//! value.
+//! * [std::mem]::[swap]
, a convenience function for swapping
+//! two values.
//! * [std::mem]::{[size_of], [size_of_val]}
, to get the size of
//! a type or value.
//! * [std::mem]::{[align_of], [align_of_val]}
, to get the
diff --git a/src/tools/clippy/clippy_lints/src/booleans.rs b/src/tools/clippy/clippy_lints/src/booleans.rs
index b6341b3fe8e7c..02d530e21cbe2 100644
--- a/src/tools/clippy/clippy_lints/src/booleans.rs
+++ b/src/tools/clippy/clippy_lints/src/booleans.rs
@@ -399,13 +399,13 @@ fn simple_negate(b: Bool) -> Bool {
t @ Term(_) => Not(Box::new(t)),
And(mut v) => {
for el in &mut v {
- *el = simple_negate(std::mem::replace(el, True));
+ *el = simple_negate(replace(el, True));
}
Or(v)
},
Or(mut v) => {
for el in &mut v {
- *el = simple_negate(std::mem::replace(el, True));
+ *el = simple_negate(replace(el, True));
}
And(v)
},
diff --git a/src/tools/clippy/clippy_lints/src/dereference.rs b/src/tools/clippy/clippy_lints/src/dereference.rs
index d60320d828253..b901bc49d6735 100644
--- a/src/tools/clippy/clippy_lints/src/dereference.rs
+++ b/src/tools/clippy/clippy_lints/src/dereference.rs
@@ -5,7 +5,6 @@ use clippy_utils::ty::{implements_trait, is_manually_drop, peel_mid_ty_refs};
use clippy_utils::{
expr_use_ctxt, get_parent_expr, is_block_like, is_lint_allowed, path_to_local, DefinedTy, ExprUseNode,
};
-use core::mem;
use rustc_ast::util::parser::{PREC_POSTFIX, PREC_PREFIX};
use rustc_data_structures::fx::FxIndexMap;
use rustc_errors::Applicability;
@@ -714,7 +713,7 @@ fn try_parse_ref_op<'tcx>(
// Checks if the adjustments contains a deref of `ManuallyDrop<_>`
fn adjust_derefs_manually_drop<'tcx>(adjustments: &'tcx [Adjustment<'tcx>], mut ty: Ty<'tcx>) -> bool {
adjustments.iter().any(|a| {
- let ty = mem::replace(&mut ty, a.target);
+ let ty = replace(&mut ty, a.target);
matches!(a.kind, Adjust::Deref(Some(ref op)) if op.mutbl == Mutability::Mut) && is_manually_drop(ty)
})
}
diff --git a/src/tools/clippy/clippy_lints/src/loops/needless_range_loop.rs b/src/tools/clippy/clippy_lints/src/loops/needless_range_loop.rs
index de7ec81bc0108..a57f9a2100338 100644
--- a/src/tools/clippy/clippy_lints/src/loops/needless_range_loop.rs
+++ b/src/tools/clippy/clippy_lints/src/loops/needless_range_loop.rs
@@ -13,7 +13,7 @@ use rustc_lint::LateContext;
use rustc_middle::middle::region;
use rustc_middle::ty::{self, Ty};
use rustc_span::symbol::{sym, Symbol};
-use std::{iter, mem};
+use std::iter;
/// Checks for looping over a range and then indexing a sequence with it.
/// The iteratee must be a range literal.
@@ -135,7 +135,7 @@ pub(super) fn check<'tcx>(
let mut method_2 = skip;
if end_is_start_plus_val {
- mem::swap(&mut method_1, &mut method_2);
+ swap(&mut method_1, &mut method_2);
}
if visitor.nonindex {
diff --git a/src/tools/clippy/clippy_lints/src/matches/significant_drop_in_scrutinee.rs b/src/tools/clippy/clippy_lints/src/matches/significant_drop_in_scrutinee.rs
index 2f72e59834fa6..fe79558a794e9 100644
--- a/src/tools/clippy/clippy_lints/src/matches/significant_drop_in_scrutinee.rs
+++ b/src/tools/clippy/clippy_lints/src/matches/significant_drop_in_scrutinee.rs
@@ -222,7 +222,7 @@ impl<'a, 'tcx> SigDropHelper<'a, 'tcx> {
fn find_sig_drop(&mut self, match_expr: &'tcx Expr<'_>) -> Vec>, focus_idx: usize) -> bool {
// Extract the kind; we'll need to make some changes in it.
- let mut focus_kind = mem::replace(&mut alternatives[focus_idx].kind, Wild);
+ let mut focus_kind = replace(&mut alternatives[focus_idx].kind, Wild);
// We'll focus on `alternatives[focus_idx]`,
// so we're draining from `alternatives[focus_idx + 1..]`.
let start = focus_idx + 1;
@@ -359,7 +358,7 @@ fn take_pat(from: &mut Pat) -> Pat {
span: DUMMY_SP,
tokens: None,
};
- mem::replace(from, dummy)
+ replace(from, dummy)
}
/// Extend `target` as an or-pattern with the alternatives
diff --git a/src/tools/clippy/clippy_lints/src/utils/format_args_collector.rs b/src/tools/clippy/clippy_lints/src/utils/format_args_collector.rs
index 5acfd35fd6ae6..8b0ddb232e528 100644
--- a/src/tools/clippy/clippy_lints/src/utils/format_args_collector.rs
+++ b/src/tools/clippy/clippy_lints/src/utils/format_args_collector.rs
@@ -8,7 +8,6 @@ use rustc_lint::{EarlyContext, EarlyLintPass};
use rustc_session::impl_lint_pass;
use rustc_span::{hygiene, Span};
use std::iter::once;
-use std::mem;
/// Populates [`FormatArgsStorage`] with AST [`FormatArgs`] nodes
pub struct FormatArgsCollector {
@@ -39,7 +38,7 @@ impl EarlyLintPass for FormatArgsCollector {
}
fn check_crate_post(&mut self, _: &EarlyContext<'_>, _: &Crate) {
- self.storage.set(mem::take(&mut self.format_args));
+ self.storage.set(take(&mut self.format_args));
}
}
diff --git a/src/tools/clippy/clippy_utils/src/lib.rs b/src/tools/clippy/clippy_utils/src/lib.rs
index 2f6bf92096776..86064788cd3a0 100644
--- a/src/tools/clippy/clippy_utils/src/lib.rs
+++ b/src/tools/clippy/clippy_utils/src/lib.rs
@@ -81,7 +81,6 @@ pub use self::hir_utils::{
both, count_eq, eq_expr_value, hash_expr, hash_stmt, is_bool, over, HirEqInterExpr, SpanlessEq, SpanlessHash,
};
-use core::mem;
use core::ops::ControlFlow;
use std::collections::hash_map::Entry;
use std::hash::BuildHasherDefault;
@@ -3108,7 +3107,7 @@ pub fn is_never_expr<'tcx>(cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) -> Option<
self.is_never = true;
},
ExprKind::If(cond, then, else_) => {
- let in_final_expr = mem::replace(&mut self.in_final_expr, false);
+ let in_final_expr = replace(&mut self.in_final_expr, false);
self.visit_expr(cond);
self.in_final_expr = in_final_expr;
@@ -3119,7 +3118,7 @@ pub fn is_never_expr<'tcx>(cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) -> Option<
}
} else {
self.visit_expr(then);
- let is_never = mem::replace(&mut self.is_never, false);
+ let is_never = replace(&mut self.is_never, false);
if let Some(else_) = else_ {
self.visit_expr(else_);
self.is_never &= is_never;
@@ -3127,7 +3126,7 @@ pub fn is_never_expr<'tcx>(cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) -> Option<
}
},
ExprKind::Match(scrutinee, arms, _) => {
- let in_final_expr = mem::replace(&mut self.in_final_expr, false);
+ let in_final_expr = replace(&mut self.in_final_expr, false);
self.visit_expr(scrutinee);
self.in_final_expr = in_final_expr;
@@ -3140,7 +3139,7 @@ pub fn is_never_expr<'tcx>(cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) -> Option<
for arm in arms {
self.is_never = false;
if let Some(guard) = arm.guard {
- let in_final_expr = mem::replace(&mut self.in_final_expr, false);
+ let in_final_expr = replace(&mut self.in_final_expr, false);
self.visit_expr(guard);
self.in_final_expr = in_final_expr;
// The compiler doesn't consider diverging guards as causing the arm to diverge.
@@ -3176,7 +3175,7 @@ pub fn is_never_expr<'tcx>(cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) -> Option<
}
fn visit_block(&mut self, b: &'tcx Block<'_>) {
- let in_final_expr = mem::replace(&mut self.in_final_expr, false);
+ let in_final_expr = replace(&mut self.in_final_expr, false);
for s in b.stmts {
self.visit_stmt(s);
}
@@ -3199,7 +3198,7 @@ pub fn is_never_expr<'tcx>(cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) -> Option<
fn visit_arm(&mut self, arm: &Arm<'tcx>) {
if let Some(guard) = arm.guard {
- let in_final_expr = mem::replace(&mut self.in_final_expr, false);
+ let in_final_expr = replace(&mut self.in_final_expr, false);
self.visit_expr(guard);
self.in_final_expr = in_final_expr;
}
diff --git a/src/tools/clippy/clippy_utils/src/visitors.rs b/src/tools/clippy/clippy_utils/src/visitors.rs
index 90b56297bb556..63a81cd6eaef2 100644
--- a/src/tools/clippy/clippy_utils/src/visitors.rs
+++ b/src/tools/clippy/clippy_utils/src/visitors.rs
@@ -208,7 +208,7 @@ where
impl