Skip to content

Commit

Permalink
Replace filter_map().next() calls with find_map()
Browse files Browse the repository at this point in the history
These are semantically the same, but `find_map()` is more concise.
  • Loading branch information
cuviper committed Apr 25, 2020
1 parent 3360cc3 commit 4282776
Show file tree
Hide file tree
Showing 21 changed files with 99 additions and 151 deletions.
6 changes: 1 addition & 5 deletions src/librustc_codegen_ssa/back/linker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1127,11 +1127,7 @@ fn exported_symbols(tcx: TyCtxt<'_>, crate_type: CrateType) -> Vec<String> {
}

let formats = tcx.dependency_formats(LOCAL_CRATE);
let deps = formats
.iter()
.filter_map(|(t, list)| if *t == crate_type { Some(list) } else { None })
.next()
.unwrap();
let deps = formats.iter().find_map(|(t, list)| (*t == crate_type).then_some(list)).unwrap();

for (index, dep_format) in deps.iter().enumerate() {
let cnum = CrateNum::new(index + 1);
Expand Down
23 changes: 10 additions & 13 deletions src/librustc_errors/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -285,21 +285,18 @@ pub trait Emitter {
let has_macro_spans = iter::once(&*span)
.chain(children.iter().map(|child| &child.span))
.flat_map(|span| span.primary_spans())
.copied()
.flat_map(|sp| {
sp.macro_backtrace().filter_map(|expn_data| {
match expn_data.kind {
ExpnKind::Root => None,
.flat_map(|sp| sp.macro_backtrace())
.find_map(|expn_data| {
match expn_data.kind {
ExpnKind::Root => None,

// Skip past non-macro entries, just in case there
// are some which do actually involve macros.
ExpnKind::Desugaring(..) | ExpnKind::AstPass(..) => None,
// Skip past non-macro entries, just in case there
// are some which do actually involve macros.
ExpnKind::Desugaring(..) | ExpnKind::AstPass(..) => None,

ExpnKind::Macro(macro_kind, _) => Some(macro_kind),
}
})
})
.next();
ExpnKind::Macro(macro_kind, _) => Some(macro_kind),
}
});

if !backtrace {
self.fix_multispans_in_extern_macros(source_map, span, children);
Expand Down
3 changes: 1 addition & 2 deletions src/librustc_infer/infer/error_reporting/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1630,8 +1630,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
];
if let Some(msg) = have_as_ref
.iter()
.filter_map(|(path, msg)| if &path_str == path { Some(msg) } else { None })
.next()
.find_map(|(path, msg)| (&path_str == path).then_some(msg))
{
let mut show_suggestion = true;
for (exp_ty, found_ty) in exp_substs.types().zip(found_substs.types()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
return fndecl
.inputs
.iter()
.filter_map(|arg| self.find_component_for_bound_region(arg, br))
.next()
.find_map(|arg| self.find_component_for_bound_region(arg, br))
.map(|ty| (ty, &**fndecl));
}
}
Expand Down
54 changes: 25 additions & 29 deletions src/librustc_infer/infer/error_reporting/nice_region_error/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,37 +58,33 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
let fn_decl = hir.fn_decl_by_hir_id(owner_id).unwrap();
let poly_fn_sig = self.tcx().fn_sig(id);
let fn_sig = self.tcx().liberate_late_bound_regions(id, &poly_fn_sig);
body.params
.iter()
.enumerate()
.filter_map(|(index, param)| {
// May return None; sometimes the tables are not yet populated.
let ty = fn_sig.inputs()[index];
let mut found_anon_region = false;
let new_param_ty = self.tcx().fold_regions(&ty, &mut false, |r, _| {
if *r == *anon_region {
found_anon_region = true;
replace_region
} else {
r
}
});
if found_anon_region {
let ty_hir_id = fn_decl.inputs[index].hir_id;
let param_ty_span = hir.span(ty_hir_id);
let is_first = index == 0;
Some(AnonymousParamInfo {
param,
param_ty: new_param_ty,
param_ty_span,
bound_region,
is_first,
})
body.params.iter().enumerate().find_map(|(index, param)| {
// May return None; sometimes the tables are not yet populated.
let ty = fn_sig.inputs()[index];
let mut found_anon_region = false;
let new_param_ty = self.tcx().fold_regions(&ty, &mut false, |r, _| {
if *r == *anon_region {
found_anon_region = true;
replace_region
} else {
None
r
}
})
.next()
});
if found_anon_region {
let ty_hir_id = fn_decl.inputs[index].hir_id;
let param_ty_span = hir.span(ty_hir_id);
let is_first = index == 0;
Some(AnonymousParamInfo {
param,
param_ty: new_param_ty,
param_ty_span,
bound_region,
is_first,
})
} else {
None
}
})
}

// Here, we check for the case where the anonymous region
Expand Down
19 changes: 8 additions & 11 deletions src/librustc_interface/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,17 +267,14 @@ pub fn rustc_path<'a>() -> Option<&'a Path> {
}

fn get_rustc_path_inner(bin_path: &str) -> Option<PathBuf> {
sysroot_candidates()
.iter()
.filter_map(|sysroot| {
let candidate = sysroot.join(bin_path).join(if cfg!(target_os = "windows") {
"rustc.exe"
} else {
"rustc"
});
candidate.exists().then_some(candidate)
})
.next()
sysroot_candidates().iter().find_map(|sysroot| {
let candidate = sysroot.join(bin_path).join(if cfg!(target_os = "windows") {
"rustc.exe"
} else {
"rustc"
});
candidate.exists().then_some(candidate)
})
}

fn sysroot_candidates() -> Vec<PathBuf> {
Expand Down
3 changes: 1 addition & 2 deletions src/librustc_middle/mir/interpret/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,7 @@ impl<'tcx> ConstEvalErr<'tcx> {
.stacktrace
.iter()
.rev()
.filter_map(|frame| frame.lint_root)
.next()
.find_map(|frame| frame.lint_root)
.unwrap_or(lint_root);
tcx.struct_span_lint_hir(
rustc_session::lint::builtin::CONST_ERR,
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_middle/ty/print/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ pub fn characteristic_def_id_of_type(ty: Ty<'_>) -> Option<DefId> {
ty::Ref(_, ty, _) => characteristic_def_id_of_type(ty),

ty::Tuple(ref tys) => {
tys.iter().filter_map(|ty| characteristic_def_id_of_type(ty.expect_ty())).next()
tys.iter().find_map(|ty| characteristic_def_id_of_type(ty.expect_ty()))
}

ty::FnDef(def_id, _)
Expand Down
11 changes: 4 additions & 7 deletions src/librustc_middle/ty/print/pretty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,13 +150,10 @@ impl RegionHighlightMode {

/// Returns `Some(n)` with the number to use for the given region, if any.
fn region_highlighted(&self, region: ty::Region<'_>) -> Option<usize> {
self.highlight_regions
.iter()
.filter_map(|h| match h {
Some((r, n)) if r == region => Some(*n),
_ => None,
})
.next()
self.highlight_regions.iter().find_map(|h| match h {
Some((r, n)) if r == region => Some(*n),
_ => None,
})
}

/// Highlight the given bound region.
Expand Down
3 changes: 1 addition & 2 deletions src/librustc_mir/borrow_check/region_infer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1815,11 +1815,10 @@ impl<'tcx> RegionInferenceContext<'tcx> {
RegionElement::PlaceholderRegion(error_placeholder) => self
.definitions
.iter_enumerated()
.filter_map(|(r, definition)| match definition.origin {
.find_map(|(r, definition)| match definition.origin {
NLLRegionVariableOrigin::Placeholder(p) if p == error_placeholder => Some(r),
_ => None,
})
.next()
.unwrap(),
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/librustc_mir/transform/rustc_peek.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,7 @@ pub fn sanity_check_via_rustc_peek<'tcx, A>(
.statements
.iter()
.enumerate()
.filter_map(|(i, stmt)| value_assigned_to_local(stmt, call.arg).map(|rval| (i, rval)))
.next()
.find_map(|(i, stmt)| value_assigned_to_local(stmt, call.arg).map(|rval| (i, rval)))
.expect(
"call to rustc_peek should be preceded by \
assignment to temporary holding its argument",
Expand Down
9 changes: 3 additions & 6 deletions src/librustc_resolve/late/lifetimes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -480,14 +480,11 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
let next_early_index = self.next_early_index();
let was_in_fn_syntax = self.is_in_fn_syntax;
self.is_in_fn_syntax = true;
let lifetime_span: Option<Span> = c
.generic_params
.iter()
.filter_map(|param| match param.kind {
let lifetime_span: Option<Span> =
c.generic_params.iter().rev().find_map(|param| match param.kind {
GenericParamKind::Lifetime { .. } => Some(param.span),
_ => None,
})
.last();
});
let (span, span_type) = if let Some(span) = lifetime_span {
(span.shrink_to_hi(), ForLifetimeSpanType::TypeTail)
} else {
Expand Down
3 changes: 1 addition & 2 deletions src/librustc_typeck/astconv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1136,13 +1136,12 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
.generic_args()
.bindings
.iter()
.filter_map(|b| match (b.ident.as_str() == "Output", &b.kind) {
.find_map(|b| match (b.ident.as_str() == "Output", &b.kind) {
(true, hir::TypeBindingKind::Equality { ty }) => {
sess.source_map().span_to_snippet(ty.span).ok()
}
_ => None,
})
.next()
.unwrap_or_else(|| "()".to_string()),
)),
)
Expand Down
11 changes: 4 additions & 7 deletions src/librustc_typeck/check/closure.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,13 +177,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {

match expected_ty.kind {
ty::Dynamic(ref object_type, ..) => {
let sig = object_type
.projection_bounds()
.filter_map(|pb| {
let pb = pb.with_self_ty(self.tcx, self.tcx.types.err);
self.deduce_sig_from_projection(None, &pb)
})
.next();
let sig = object_type.projection_bounds().find_map(|pb| {
let pb = pb.with_self_ty(self.tcx, self.tcx.types.err);
self.deduce_sig_from_projection(None, &pb)
});
let kind = object_type
.principal_def_id()
.and_then(|did| self.tcx.fn_trait_kind_from_lang_item(did));
Expand Down
17 changes: 7 additions & 10 deletions src/librustc_typeck/check/compare_method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -453,16 +453,13 @@ fn extract_spans_for_error_reporting<'a, 'tcx>(
.zip(trait_iter)
.zip(impl_m_iter)
.zip(trait_m_iter)
.filter_map(
|(((&impl_arg_ty, &trait_arg_ty), impl_arg), trait_arg)| match infcx
.at(&cause, param_env)
.sub(trait_arg_ty, impl_arg_ty)
{
Ok(_) => None,
Err(_) => Some((impl_arg.span, Some(trait_arg.span))),
},
)
.next()
.find_map(|(((&impl_arg_ty, &trait_arg_ty), impl_arg), trait_arg)| match infcx
.at(&cause, param_env)
.sub(trait_arg_ty, impl_arg_ty)
{
Ok(_) => None,
Err(_) => Some((impl_arg.span, Some(trait_arg.span))),
})
.unwrap_or_else(|| {
if infcx
.at(&cause, param_env)
Expand Down
9 changes: 3 additions & 6 deletions src/librustc_typeck/check/method/confirm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
self.fcx
.autoderef(self.span, self_ty)
.include_raw_pointers()
.filter_map(|(ty, _)| match ty.kind {
.find_map(|(ty, _)| match ty.kind {
ty::Dynamic(ref data, ..) => Some(closure(
self,
ty,
Expand All @@ -279,7 +279,6 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
)),
_ => None,
})
.next()
.unwrap_or_else(|| {
span_bug!(
self.span,
Expand Down Expand Up @@ -579,20 +578,18 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
.predicates
.iter()
.zip(predicates.spans.iter())
.filter_map(
.find_map(
|(p, span)| if *p == obligation.predicate { Some(*span) } else { None },
)
.next()
.unwrap_or(rustc_span::DUMMY_SP);
Some((trait_pred, span))
}
_ => None,
})
.filter_map(|(trait_pred, span)| match trait_pred.skip_binder().self_ty().kind {
.find_map(|(trait_pred, span)| match trait_pred.skip_binder().self_ty().kind {
ty::Dynamic(..) => Some(span),
_ => None,
})
.next()
}

fn enforce_illegal_method_limitations(&self, pick: &probe::Pick<'_>) {
Expand Down
11 changes: 3 additions & 8 deletions src/librustdoc/html/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3527,14 +3527,13 @@ fn render_deref_methods(
.inner_impl()
.items
.iter()
.filter_map(|item| match item.inner {
.find_map(|item| match item.inner {
clean::TypedefItem(ref t, true) => Some(match *t {
clean::Typedef { item_type: Some(ref type_), .. } => (type_, &t.type_),
_ => (&t.type_, &t.type_),
}),
_ => None,
})
.next()
.expect("Expected associated type binding");
let what =
AssocItemRender::DerefFor { trait_: deref_type, type_: real_target, deref_mut_: deref_mut };
Expand Down Expand Up @@ -4111,18 +4110,14 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
.filter(|i| i.inner_impl().trait_.is_some())
.find(|i| i.inner_impl().trait_.def_id() == c.deref_trait_did)
{
if let Some((target, real_target)) = impl_
.inner_impl()
.items
.iter()
.filter_map(|item| match item.inner {
if let Some((target, real_target)) =
impl_.inner_impl().items.iter().find_map(|item| match item.inner {
clean::TypedefItem(ref t, true) => Some(match *t {
clean::Typedef { item_type: Some(ref type_), .. } => (type_, &t.type_),
_ => (&t.type_, &t.type_),
}),
_ => None,
})
.next()
{
let inner_impl = target
.def_id()
Expand Down
3 changes: 1 addition & 2 deletions src/librustdoc/passes/collect_trait_impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,10 @@ pub fn collect_trait_impls(krate: Crate, cx: &DocContext<'_>) -> Crate {
if cleaner.keep_item(for_) && trait_.def_id() == cx.tcx.lang_items().deref_trait() {
let target = items
.iter()
.filter_map(|item| match item.inner {
.find_map(|item| match item.inner {
TypedefItem(ref t, true) => Some(&t.type_),
_ => None,
})
.next()
.expect("Deref impl without Target type");

if let Some(prim) = target.primitive_type() {
Expand Down
Loading

0 comments on commit 4282776

Please sign in to comment.