blob: f2cf93465c0d781b1534ab5fdaef3ee94c009603 [file]
use clippy_utils::diagnostics::span_lint_and_sugg;
use rustc_ast::{Pat, PatKind};
use rustc_errors::Applicability;
use rustc_lint::{EarlyContext, LintContext};
use super::REDUNDANT_AT_REST_PATTERN;
pub(super) fn check(cx: &EarlyContext<'_>, pat: &Pat) {
if !pat.span.in_external_macro(cx.sess().source_map())
&& let PatKind::Slice(slice) = &pat.kind
&& let [one] = &**slice
&& let PatKind::Ident(annotation, ident, Some(rest)) = &one.kind
&& let PatKind::Rest = rest.kind
{
span_lint_and_sugg(
cx,
REDUNDANT_AT_REST_PATTERN,
pat.span,
"using a rest pattern to bind an entire slice to a local",
"this is better represented with just the binding",
format!("{}{ident}", annotation.prefix_str()),
Applicability::MachineApplicable,
);
}
}