Unify manual_unwrap_or and manual_unwrap_or_default code
Both lints share a lot of characteristics but were implemented in unrelated ways. This unifies them, saving around 100 SLOC in the process, and making one more test trigger the lint. Also, this removes useless blocks in suggestions.
This commit is contained in:
parent
a001ae3be8
commit
94233fb0ee
13 changed files with 328 additions and 355 deletions
|
|
@ -176,6 +176,12 @@ impl<'hir> IfLetOrMatch<'hir> {
|
|||
),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn scrutinee(&self) -> &'hir Expr<'hir> {
|
||||
match self {
|
||||
Self::Match(scrutinee, _, _) | Self::IfLet(scrutinee, _, _, _, _) => scrutinee,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// An `if` or `if let` expression
|
||||
|
|
|
|||
|
|
@ -1027,6 +1027,7 @@ pub fn is_default_equivalent(cx: &LateContext<'_>, e: &Expr<'_>) -> bool {
|
|||
ExprKind::Call(from_func, [arg]) => is_default_equivalent_from(cx, from_func, arg),
|
||||
ExprKind::Path(qpath) => is_res_lang_ctor(cx, cx.qpath_res(qpath, e.hir_id), OptionNone),
|
||||
ExprKind::AddrOf(rustc_hir::BorrowKind::Ref, _, expr) => matches!(expr.kind, ExprKind::Array([])),
|
||||
ExprKind::Block(Block { stmts: [], expr, .. }, _) => expr.is_some_and(|e| is_default_equivalent(cx, e)),
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue