From ae5d391d21fb227da007da44286e43ce61f10f38 Mon Sep 17 00:00:00 2001 From: Catherine Flores Date: Sat, 22 Jul 2023 05:57:39 -0500 Subject: [PATCH] Remove `LetChain` --- clippy_lints/src/len_zero.rs | 2 +- clippy_utils/src/higher.rs | 92 ------------------------------------ 2 files changed, 1 insertion(+), 93 deletions(-) diff --git a/clippy_lints/src/len_zero.rs b/clippy_lints/src/len_zero.rs index a707921ce7eb..d4236926a6c8 100644 --- a/clippy_lints/src/len_zero.rs +++ b/clippy_lints/src/len_zero.rs @@ -170,7 +170,7 @@ impl<'tcx> LateLintPass<'tcx> for LenZero { if let ExprKind::Let(lt) = expr.kind && has_is_empty(cx, lt.init) && match lt.pat.kind { - PatKind::Slice([], _, []) => true, + PatKind::Slice([], None, []) => true, PatKind::Lit(lit) if is_empty_string(lit) => true, _ => false, } diff --git a/clippy_utils/src/higher.rs b/clippy_utils/src/higher.rs index 312e6ea40c59..802adbd4d2d5 100644 --- a/clippy_utils/src/higher.rs +++ b/clippy_utils/src/higher.rs @@ -5,7 +5,6 @@ use crate::consts::{constant_simple, Constant}; use crate::ty::is_type_diagnostic_item; use crate::{is_expn_of, match_def_path, paths}; -use hir::BinOpKind; use if_chain::if_chain; use rustc_ast::ast; use rustc_hir as hir; @@ -138,97 +137,6 @@ impl<'hir> IfLet<'hir> { } } -/// A `let` chain, like `if true && let Some(true) = x {}` -#[derive(Debug)] -pub struct LetChain<'hir> { - pub conds: Vec>, - pub if_then: &'hir Expr<'hir>, - pub if_else: Option<&'hir Expr<'hir>>, -} - -impl<'hir> LetChain<'hir> { - pub fn hir(expr: &Expr<'hir>) -> Option { - if let ExprKind::If(cond, if_then, if_else) = expr.kind { - let mut conds = vec![]; - let mut cursor = cond; - while let ExprKind::Binary(binop, lhs, rhs) = cursor.kind - && let BinOpKind::And = binop.node - { - cursor = lhs; - conds.push(IfOrIfLetInChain::hir(rhs)?); - } - - // The final lhs cannot be `&&` - conds.push(IfOrIfLetInChain::hir(cursor)?); - - return Some(Self { - conds, - if_then, - if_else, - }); - } - - None - } -} - -/// An `if let` or `if` expression in a let chain. -#[derive(Debug)] -pub enum IfOrIfLetInChain<'hir> { - If(IfInChain<'hir>), - IfLet(IfLetInChain<'hir>), -} - -impl<'hir> IfOrIfLetInChain<'hir> { - pub fn hir(expr: &Expr<'hir>) -> Option { - match expr.kind { - ExprKind::DropTemps(cond) => Some(IfInChain { cond }.into()), - ExprKind::Let(hir::Let { - pat: let_pat, - init: let_expr, - span: let_span, - .. - }) => Some( - IfLetInChain { - let_pat, - let_expr, - let_span: *let_span, - } - .into(), - ), - _ => None, - } - } -} - -impl<'hir> From> for IfOrIfLetInChain<'hir> { - fn from(value: IfInChain<'hir>) -> Self { - Self::If(value) - } -} - -impl<'hir> From> for IfOrIfLetInChain<'hir> { - fn from(value: IfLetInChain<'hir>) -> Self { - Self::IfLet(value) - } -} - -/// An `if` expression in a let chain. -#[derive(Debug)] -pub struct IfInChain<'hir> { - pub cond: &'hir Expr<'hir>, -} - -/// An `if let` expression in a let chain. -#[derive(Debug)] -pub struct IfLetInChain<'hir> { - pub let_span: Span, - /// `if let` pattern - pub let_pat: &'hir Pat<'hir>, - /// `if let` scrutinee - pub let_expr: &'hir Expr<'hir>, -} - /// An `if let` or `match` expression. Useful for lints that trigger on one or the other. #[derive(Debug)] pub enum IfLetOrMatch<'hir> {