- fn moves_by_default(cx: &LateContext<'_, '_>, expression: &Expr) -> bool {
- let expr_ty = cx.tables.expr_ty(expression);
+ fn check_if_let_some_and_early_return_none(cx: &LateContext<'_>, expr: &Expr<'_>) {
+ if_chain! {
+ if let ExprKind::Match(subject, arms, source) = &expr.kind;
+ if *source == MatchSource::IfLetDesugar { contains_else_clause: true };
+ if Self::is_option(cx, subject);
+
+ if let PatKind::TupleStruct(path1, fields, None) = &arms[0].pat.kind;
+ if is_lang_ctor(cx, path1, OptionSome);
+ if let PatKind::Binding(annot, bind_id, _, _) = fields[0].kind;
+ let by_ref = matches!(annot, BindingAnnotation::Ref | BindingAnnotation::RefMut);
+
+ if let ExprKind::Block(block, None) = &arms[0].body.kind;
+ if block.stmts.is_empty();
+ if let Some(trailing_expr) = &block.expr;
+ if path_to_local_id(trailing_expr, bind_id);