1 use clippy_utils::diagnostics::span_lint_and_help;
2 use rustc_hir::{Pat, PatKind, QPath};
3 use rustc_lint::LateContext;
6 use super::REST_PAT_IN_FULLY_BOUND_STRUCTS;
8 pub(crate) fn check(cx: &LateContext<'_>, pat: &Pat<'_>) {
10 if !pat.span.from_expansion();
11 if let PatKind::Struct(QPath::Resolved(_, path), fields, true) = pat.kind;
12 if let Some(def_id) = path.res.opt_def_id();
13 let ty = cx.tcx.type_of(def_id);
14 if let ty::Adt(def, _) = ty.kind();
15 if def.is_struct() || def.is_union();
16 if fields.len() == def.non_enum_variant().fields.len();
17 if !def.non_enum_variant().is_field_list_non_exhaustive();
22 REST_PAT_IN_FULLY_BOUND_STRUCTS,
24 "unnecessary use of `..` pattern in struct binding. All fields were already bound",
26 "consider removing `..` from this binding",