Use each_binding_or_first
in capture_local_usage
This commit is contained in:
parent
10c0460a47
commit
f0444d73de
@ -733,16 +733,18 @@ impl std::ops::BitOrAssign for CaptureKind {
|
||||
pub fn capture_local_usage(cx: &LateContext<'tcx>, e: &Expr<'_>) -> CaptureKind {
|
||||
fn pat_capture_kind(cx: &LateContext<'_>, pat: &Pat<'_>) -> CaptureKind {
|
||||
let mut capture = CaptureKind::Ref(Mutability::Not);
|
||||
pat.each_binding(|_, id, span, _| {
|
||||
match cx.typeck_results().extract_binding_mode(cx.sess(), id, span).unwrap() {
|
||||
BindingMode::BindByValue(_) if !is_copy(cx, cx.typeck_results().node_type(id)) => {
|
||||
capture = CaptureKind::Value;
|
||||
},
|
||||
BindingMode::BindByReference(Mutability::Mut) if capture != CaptureKind::Value => {
|
||||
capture = CaptureKind::Ref(Mutability::Mut);
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
pat.each_binding_or_first(&mut |_, id, span, _| match cx
|
||||
.typeck_results()
|
||||
.extract_binding_mode(cx.sess(), id, span)
|
||||
.unwrap()
|
||||
{
|
||||
BindingMode::BindByValue(_) if !is_copy(cx, cx.typeck_results().node_type(id)) => {
|
||||
capture = CaptureKind::Value;
|
||||
},
|
||||
BindingMode::BindByReference(Mutability::Mut) if capture != CaptureKind::Value => {
|
||||
capture = CaptureKind::Ref(Mutability::Mut);
|
||||
},
|
||||
_ => (),
|
||||
});
|
||||
capture
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user