1 use clippy_utils::diagnostics::{span_lint, span_lint_and_help};
2 use rustc_ast::ast::{Pat, PatKind};
3 use rustc_lint::{EarlyContext, LintContext};
5 use super::UNNEEDED_FIELD_PATTERN;
7 pub(super) fn check(cx: &EarlyContext<'_>, pat: &Pat) {
8 if let PatKind::Struct(_, ref npat, ref pfields, _) = pat.kind {
13 .expect("A path must have at least one segment")
17 for field in pfields {
18 if let PatKind::Wild = field.pat.kind {
22 if !pfields.is_empty() && wilds == pfields.len() {
25 UNNEEDED_FIELD_PATTERN,
27 "all the struct fields are matched to a wildcard pattern, consider using `..`",
29 &format!("try with `{} {{ .. }}` instead", type_name),
34 for field in pfields {
35 if let PatKind::Wild = field.pat.kind {
40 UNNEEDED_FIELD_PATTERN,
42 "you matched a field with a wildcard pattern, consider using `..` instead",
45 let mut normal = vec![];
47 for field in pfields {
48 match field.pat.kind {
51 if let Ok(n) = cx.sess().source_map().span_to_snippet(field.span) {
60 UNNEEDED_FIELD_PATTERN,
62 "you matched a field with a wildcard pattern, consider using `..` \
65 &format!("try with `{} {{ {}, .. }}`", type_name, normal[..].join(", ")),