Auto merge of #11802 - dswij:issue-11765, r=xFrednet
`needless_return_with_question_mark` ignore let-else Fixes #11765 This PR makes `needless_return_with_question_mark` to ignore expr inside let-else. changelog: [`needless_return_with_question_mark`] ignore let-else
This commit is contained in:
commit
7ad3373bb1
5 changed files with 84 additions and 2 deletions
|
|
@ -1487,6 +1487,43 @@ pub fn is_else_clause(tcx: TyCtxt<'_>, expr: &Expr<'_>) -> bool {
|
|||
}
|
||||
}
|
||||
|
||||
/// Checks if the given expression is a part of `let else`
|
||||
/// returns `true` for both the `init` and the `else` part
|
||||
pub fn is_inside_let_else(tcx: TyCtxt<'_>, expr: &Expr<'_>) -> bool {
|
||||
let mut child_id = expr.hir_id;
|
||||
for (parent_id, node) in tcx.hir().parent_iter(child_id) {
|
||||
if let Node::Local(Local {
|
||||
init: Some(init),
|
||||
els: Some(els),
|
||||
..
|
||||
}) = node
|
||||
&& (init.hir_id == child_id || els.hir_id == child_id)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
child_id = parent_id;
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
/// Checks if the given expression is the else clause of a `let else` expression
|
||||
pub fn is_else_clause_in_let_else(tcx: TyCtxt<'_>, expr: &Expr<'_>) -> bool {
|
||||
let mut child_id = expr.hir_id;
|
||||
for (parent_id, node) in tcx.hir().parent_iter(child_id) {
|
||||
if let Node::Local(Local { els: Some(els), .. }) = node
|
||||
&& els.hir_id == child_id
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
child_id = parent_id;
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
/// Checks whether the given `Expr` is a range equivalent to a `RangeFull`.
|
||||
/// For the lower bound, this means that:
|
||||
/// - either there is none
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue