Rollup merge of #93046 - est31:let_else, r=davidtwco
Use let_else in even more places Followup of #89933, #91018, #91481.
This commit is contained in:
commit
ab19d4a515
9 changed files with 134 additions and 140 deletions
|
@ -1,5 +1,6 @@
|
|||
#![feature(bool_to_option)]
|
||||
#![feature(box_patterns)]
|
||||
#![feature(let_else)]
|
||||
#![feature(internal_output_capture)]
|
||||
#![feature(thread_spawn_unchecked)]
|
||||
#![feature(nll)]
|
||||
|
|
|
@ -717,57 +717,57 @@ impl<'a, 'b> ReplaceBodyWithLoop<'a, 'b> {
|
|||
}
|
||||
|
||||
fn should_ignore_fn(ret_ty: &ast::FnRetTy) -> bool {
|
||||
if let ast::FnRetTy::Ty(ref ty) = ret_ty {
|
||||
fn involves_impl_trait(ty: &ast::Ty) -> bool {
|
||||
match ty.kind {
|
||||
ast::TyKind::ImplTrait(..) => true,
|
||||
ast::TyKind::Slice(ref subty)
|
||||
| ast::TyKind::Array(ref subty, _)
|
||||
| ast::TyKind::Ptr(ast::MutTy { ty: ref subty, .. })
|
||||
| ast::TyKind::Rptr(_, ast::MutTy { ty: ref subty, .. })
|
||||
| ast::TyKind::Paren(ref subty) => involves_impl_trait(subty),
|
||||
ast::TyKind::Tup(ref tys) => any_involves_impl_trait(tys.iter()),
|
||||
ast::TyKind::Path(_, ref path) => {
|
||||
path.segments.iter().any(|seg| match seg.args.as_deref() {
|
||||
None => false,
|
||||
Some(&ast::GenericArgs::AngleBracketed(ref data)) => {
|
||||
data.args.iter().any(|arg| match arg {
|
||||
ast::AngleBracketedArg::Arg(arg) => match arg {
|
||||
ast::GenericArg::Type(ty) => involves_impl_trait(ty),
|
||||
ast::GenericArg::Lifetime(_)
|
||||
| ast::GenericArg::Const(_) => false,
|
||||
},
|
||||
ast::AngleBracketedArg::Constraint(c) => match c.kind {
|
||||
ast::AssocConstraintKind::Bound { .. } => true,
|
||||
ast::AssocConstraintKind::Equality { ref term } => {
|
||||
match term {
|
||||
Term::Ty(ty) => involves_impl_trait(ty),
|
||||
// FIXME(...): This should check if the constant
|
||||
// involves a trait impl, but for now ignore.
|
||||
Term::Const(_) => false,
|
||||
}
|
||||
let ast::FnRetTy::Ty(ref ty) = ret_ty else {
|
||||
return false;
|
||||
};
|
||||
fn involves_impl_trait(ty: &ast::Ty) -> bool {
|
||||
match ty.kind {
|
||||
ast::TyKind::ImplTrait(..) => true,
|
||||
ast::TyKind::Slice(ref subty)
|
||||
| ast::TyKind::Array(ref subty, _)
|
||||
| ast::TyKind::Ptr(ast::MutTy { ty: ref subty, .. })
|
||||
| ast::TyKind::Rptr(_, ast::MutTy { ty: ref subty, .. })
|
||||
| ast::TyKind::Paren(ref subty) => involves_impl_trait(subty),
|
||||
ast::TyKind::Tup(ref tys) => any_involves_impl_trait(tys.iter()),
|
||||
ast::TyKind::Path(_, ref path) => {
|
||||
path.segments.iter().any(|seg| match seg.args.as_deref() {
|
||||
None => false,
|
||||
Some(&ast::GenericArgs::AngleBracketed(ref data)) => {
|
||||
data.args.iter().any(|arg| match arg {
|
||||
ast::AngleBracketedArg::Arg(arg) => match arg {
|
||||
ast::GenericArg::Type(ty) => involves_impl_trait(ty),
|
||||
ast::GenericArg::Lifetime(_) | ast::GenericArg::Const(_) => {
|
||||
false
|
||||
}
|
||||
},
|
||||
ast::AngleBracketedArg::Constraint(c) => match c.kind {
|
||||
ast::AssocConstraintKind::Bound { .. } => true,
|
||||
ast::AssocConstraintKind::Equality { ref term } => {
|
||||
match term {
|
||||
Term::Ty(ty) => involves_impl_trait(ty),
|
||||
// FIXME(...): This should check if the constant
|
||||
// involves a trait impl, but for now ignore.
|
||||
Term::Const(_) => false,
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
Some(&ast::GenericArgs::Parenthesized(ref data)) => {
|
||||
any_involves_impl_trait(data.inputs.iter())
|
||||
|| ReplaceBodyWithLoop::should_ignore_fn(&data.output)
|
||||
}
|
||||
})
|
||||
}
|
||||
_ => false,
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
Some(&ast::GenericArgs::Parenthesized(ref data)) => {
|
||||
any_involves_impl_trait(data.inputs.iter())
|
||||
|| ReplaceBodyWithLoop::should_ignore_fn(&data.output)
|
||||
}
|
||||
})
|
||||
}
|
||||
_ => false,
|
||||
}
|
||||
|
||||
fn any_involves_impl_trait<'a, I: Iterator<Item = &'a P<ast::Ty>>>(mut it: I) -> bool {
|
||||
it.any(|subty| involves_impl_trait(subty))
|
||||
}
|
||||
|
||||
involves_impl_trait(ty)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
|
||||
fn any_involves_impl_trait<'a, I: Iterator<Item = &'a P<ast::Ty>>>(mut it: I) -> bool {
|
||||
it.any(|subty| involves_impl_trait(subty))
|
||||
}
|
||||
|
||||
involves_impl_trait(ty)
|
||||
}
|
||||
|
||||
fn is_sig_const(sig: &ast::FnSig) -> bool {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue