From 4184c6af0d717b246d2dcfdcd0a23db94d274706 Mon Sep 17 00:00:00 2001 From: Johann Hemmann Date: Fri, 19 Jan 2024 13:36:56 +0100 Subject: [PATCH] collapsible_match --- Cargo.toml | 1 - crates/hir-ty/src/infer/closure.rs | 10 +-- crates/hir-ty/src/mir/eval.rs | 5 +- crates/hir-ty/src/mir/lower/as_place.rs | 88 +++++++++---------- .../hir-ty/src/mir/lower/pattern_matching.rs | 6 +- crates/ide-completion/src/context/analysis.rs | 5 +- 6 files changed, 50 insertions(+), 65 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7ec85629cb0..3a740edf47d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -169,7 +169,6 @@ new_ret_no_self = "allow" ## Following lints should be tackled at some point borrowed_box = "allow" borrow_deref_ref = "allow" -collapsible_match = "allow" clone_on_copy = "allow" derivable_impls = "allow" derived_hash_with_manual_eq = "allow" diff --git a/crates/hir-ty/src/infer/closure.rs b/crates/hir-ty/src/infer/closure.rs index d6d021340d1..d1080502cf1 100644 --- a/crates/hir-ty/src/infer/closure.rs +++ b/crates/hir-ty/src/infer/closure.rs @@ -334,12 +334,10 @@ impl InferenceContext<'_> { match &self.body[tgt_expr] { Expr::Path(p) => { let resolver = resolver_for_expr(self.db.upcast(), self.owner, tgt_expr); - if let Some(r) = resolver.resolve_path_in_value_ns(self.db.upcast(), p) { - if let ResolveValueResult::ValueNs(v, _) = r { - if let ValueNs::LocalBinding(b) = v { - return Some(HirPlace { local: b, projections: vec![] }); - } - } + if let Some(ResolveValueResult::ValueNs(ValueNs::LocalBinding(b), _)) = + resolver.resolve_path_in_value_ns(self.db.upcast(), p) + { + return Some(HirPlace { local: b, projections: vec![] }); } } Expr::Field { expr, name: _ } => { diff --git a/crates/hir-ty/src/mir/eval.rs b/crates/hir-ty/src/mir/eval.rs index 124adf88645..5e8b44f1996 100644 --- a/crates/hir-ty/src/mir/eval.rs +++ b/crates/hir-ty/src/mir/eval.rs @@ -1387,10 +1387,7 @@ impl Evaluator<'_> { | CastKind::PointerFromExposedAddress => { let current_ty = self.operand_ty(operand, locals)?; let is_signed = match current_ty.kind(Interner) { - TyKind::Scalar(s) => match s { - chalk_ir::Scalar::Int(_) => true, - _ => false, - }, + TyKind::Scalar(chalk_ir::Scalar::Int(_)) => true, _ => false, }; let current = pad16(self.eval_operand(operand, locals)?.get(self)?, is_signed); diff --git a/crates/hir-ty/src/mir/lower/as_place.rs b/crates/hir-ty/src/mir/lower/as_place.rs index fc51168f99e..8d157944020 100644 --- a/crates/hir-ty/src/mir/lower/as_place.rs +++ b/crates/hir-ty/src/mir/lower/as_place.rs @@ -160,57 +160,53 @@ impl MirLowerCtx<'_> { _ => try_rvalue(self), } } - Expr::UnaryOp { expr, op } => match op { - hir_def::hir::UnaryOp::Deref => { - let is_builtin = match self.expr_ty_without_adjust(*expr).kind(Interner) { - TyKind::Ref(..) | TyKind::Raw(..) => true, - TyKind::Adt(id, _) => { - if let Some(lang_item) = self.db.lang_attr(id.0.into()) { - lang_item == LangItem::OwnedBox - } else { - false - } + Expr::UnaryOp { expr, op: hir_def::hir::UnaryOp::Deref } => { + let is_builtin = match self.expr_ty_without_adjust(*expr).kind(Interner) { + TyKind::Ref(..) | TyKind::Raw(..) => true, + TyKind::Adt(id, _) => { + if let Some(lang_item) = self.db.lang_attr(id.0.into()) { + lang_item == LangItem::OwnedBox + } else { + false } - _ => false, - }; - if !is_builtin { - let Some((p, current)) = self.lower_expr_as_place(current, *expr, true)? - else { - return Ok(None); - }; - return self.lower_overloaded_deref( - current, - p, - self.expr_ty_after_adjustments(*expr), - self.expr_ty_without_adjust(expr_id), - expr_id.into(), - 'b: { - if let Some((f, _)) = self.infer.method_resolution(expr_id) { - if let Some(deref_trait) = - self.resolve_lang_item(LangItem::DerefMut)?.as_trait() - { - if let Some(deref_fn) = self - .db - .trait_data(deref_trait) - .method_by_name(&name![deref_mut]) - { - break 'b deref_fn == f; - } - } - } - false - }, - ); } - let Some((mut r, current)) = self.lower_expr_as_place(current, *expr, true)? - else { + _ => false, + }; + if !is_builtin { + let Some((p, current)) = self.lower_expr_as_place(current, *expr, true)? else { return Ok(None); }; - r = r.project(ProjectionElem::Deref, &mut self.result.projection_store); - Ok(Some((r, current))) + return self.lower_overloaded_deref( + current, + p, + self.expr_ty_after_adjustments(*expr), + self.expr_ty_without_adjust(expr_id), + expr_id.into(), + 'b: { + if let Some((f, _)) = self.infer.method_resolution(expr_id) { + if let Some(deref_trait) = + self.resolve_lang_item(LangItem::DerefMut)?.as_trait() + { + if let Some(deref_fn) = self + .db + .trait_data(deref_trait) + .method_by_name(&name![deref_mut]) + { + break 'b deref_fn == f; + } + } + } + false + }, + ); } - _ => try_rvalue(self), - }, + let Some((mut r, current)) = self.lower_expr_as_place(current, *expr, true)? else { + return Ok(None); + }; + r = r.project(ProjectionElem::Deref, &mut self.result.projection_store); + Ok(Some((r, current))) + } + Expr::UnaryOp { .. } => try_rvalue(self), Expr::Field { expr, .. } => { let Some((mut r, current)) = self.lower_expr_as_place(current, *expr, true)? else { return Ok(None); diff --git a/crates/hir-ty/src/mir/lower/pattern_matching.rs b/crates/hir-ty/src/mir/lower/pattern_matching.rs index ea0beef3c08..65ab12929dd 100644 --- a/crates/hir-ty/src/mir/lower/pattern_matching.rs +++ b/crates/hir-ty/src/mir/lower/pattern_matching.rs @@ -331,10 +331,8 @@ impl MirLowerCtx<'_> { break 'b (c, x.1); } } - if let ResolveValueResult::ValueNs(v, _) = pr { - if let ValueNs::ConstId(c) = v { - break 'b (c, Substitution::empty(Interner)); - } + if let ResolveValueResult::ValueNs(ValueNs::ConstId(c), _) = pr { + break 'b (c, Substitution::empty(Interner)); } not_supported!("path in pattern position that is not const or variant") }; diff --git a/crates/ide-completion/src/context/analysis.rs b/crates/ide-completion/src/context/analysis.rs index 0264931db15..8a4ac00de91 100644 --- a/crates/ide-completion/src/context/analysis.rs +++ b/crates/ide-completion/src/context/analysis.rs @@ -796,8 +796,7 @@ fn classify_name_ref( ast::AssocTypeArg(arg) => { let trait_ = ast::PathSegment::cast(arg.syntax().parent()?.parent()?)?; match sema.resolve_path(&trait_.parent_path().top_path())? { - hir::PathResolution::Def(def) => match def { - hir::ModuleDef::Trait(trait_) => { + hir::PathResolution::Def(hir::ModuleDef::Trait(trait_)) => { let arg_name = arg.name_ref()?; let arg_name = arg_name.text(); let trait_items = trait_.items_with_supertraits(sema.db); @@ -810,8 +809,6 @@ fn classify_name_ref( })?; sema.source(*assoc_ty)?.value.generic_param_list() } - _ => None, - }, _ => None, } },