use clippy_utils::diagnostics::span_lint_and_sugg;
use rustc_ast::ast::{Pat, PatKind};
use rustc_errors::Applicability;
use rustc_lint::{EarlyContext, LintContext as _};

use super::REDUNDANT_PATTERN;

pub(super) fn check(cx: &EarlyContext<'_>, pat: &Pat) {
    if let PatKind::Ident(ann, ident, Some(ref right)) = pat.kind
        && let PatKind::Wild = right.kind
        && !pat.span.in_external_macro(cx.sess().source_map())
    {
        span_lint_and_sugg(
            cx,
            REDUNDANT_PATTERN,
            pat.span,
            format!(
                "the `{} @ _` pattern can be written as just `{}`",
                ident.name, ident.name,
            ),
            "try",
            format!("{}{}", ann.prefix_str(), ident.name),
            Applicability::MachineApplicable,
        );
    }
}
