mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Auto merge of #127904 - flip1995:clippy-beta-backport, r=Mark-Simulacrum
[beta] Clippy backport r? `@Mark-Simulacrum` Really small backport this time: - https://github.com/rust-lang/rust-clippy/pull/12961 Fixes a quite annoying bug of this lint, that got into the last stable release 1.79.0. There were already 3 issues opened about it in the Clippy repo. It would be great to get this fixed for the next stable release. I confirmed that this commit is already part of `master`
This commit is contained in:
commit
7466ba077d
@ -53,19 +53,14 @@ declare_lint_pass!(ManualUnwrapOrDefault => [MANUAL_UNWRAP_OR_DEFAULT]);
|
||||
|
||||
fn get_some<'tcx>(cx: &LateContext<'tcx>, pat: &Pat<'tcx>) -> Option<HirId> {
|
||||
if let PatKind::TupleStruct(QPath::Resolved(_, path), &[pat], _) = pat.kind
|
||||
&& let PatKind::Binding(_, pat_id, _, _) = pat.kind
|
||||
&& let Some(def_id) = path.res.opt_def_id()
|
||||
// Since it comes from a pattern binding, we need to get the parent to actually match
|
||||
// against it.
|
||||
&& let Some(def_id) = cx.tcx.opt_parent(def_id)
|
||||
&& cx.tcx.lang_items().get(LangItem::OptionSome) == Some(def_id)
|
||||
{
|
||||
let mut bindings = Vec::new();
|
||||
pat.each_binding(|_, id, _, _| bindings.push(id));
|
||||
if let &[id] = bindings.as_slice() {
|
||||
Some(id)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
Some(pat_id)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
@ -72,3 +72,24 @@ fn issue_12569() {
|
||||
0
|
||||
};
|
||||
}
|
||||
|
||||
// Should not warn!
|
||||
fn issue_12928() {
|
||||
let x = Some((1, 2));
|
||||
let y = if let Some((a, _)) = x { a } else { 0 };
|
||||
let y = if let Some((a, ..)) = x { a } else { 0 };
|
||||
let x = Some([1, 2]);
|
||||
let y = if let Some([a, _]) = x { a } else { 0 };
|
||||
let y = if let Some([a, ..]) = x { a } else { 0 };
|
||||
|
||||
struct X {
|
||||
a: u8,
|
||||
b: u8,
|
||||
}
|
||||
let x = Some(X { a: 0, b: 0 });
|
||||
let y = if let Some(X { a, .. }) = x { a } else { 0 };
|
||||
struct Y(u8, u8);
|
||||
let x = Some(Y(0, 0));
|
||||
let y = if let Some(Y(a, _)) = x { a } else { 0 };
|
||||
let y = if let Some(Y(a, ..)) = x { a } else { 0 };
|
||||
}
|
||||
|
@ -96,3 +96,24 @@ fn issue_12569() {
|
||||
0
|
||||
};
|
||||
}
|
||||
|
||||
// Should not warn!
|
||||
fn issue_12928() {
|
||||
let x = Some((1, 2));
|
||||
let y = if let Some((a, _)) = x { a } else { 0 };
|
||||
let y = if let Some((a, ..)) = x { a } else { 0 };
|
||||
let x = Some([1, 2]);
|
||||
let y = if let Some([a, _]) = x { a } else { 0 };
|
||||
let y = if let Some([a, ..]) = x { a } else { 0 };
|
||||
|
||||
struct X {
|
||||
a: u8,
|
||||
b: u8,
|
||||
}
|
||||
let x = Some(X { a: 0, b: 0 });
|
||||
let y = if let Some(X { a, .. }) = x { a } else { 0 };
|
||||
struct Y(u8, u8);
|
||||
let x = Some(Y(0, 0));
|
||||
let y = if let Some(Y(a, _)) = x { a } else { 0 };
|
||||
let y = if let Some(Y(a, ..)) = x { a } else { 0 };
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user