Rollup merge of #112892 - petrochenkov:cleanres, r=oli-obk

resolve: Minor cleanup to `fn resolve_path_with_ribs`

A single-use closure is inlined and one unnecessary enum is removed.

Noticed when reviewing https://github.com/rust-lang/rust/pull/112686.
This commit is contained in:
Guillaume Gomez 2023-06-21 20:00:50 +02:00 committed by GitHub
commit d938be153c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1459,13 +1459,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
}); });
} }
enum FindBindingResult<'a> {
Binding(Result<&'a NameBinding<'a>, Determinacy>),
Res(Res),
}
let find_binding_in_ns = |this: &mut Self, ns| {
let binding = if let Some(module) = module { let binding = if let Some(module) = module {
this.resolve_ident_in_module( self.resolve_ident_in_module(
module, module,
ident, ident,
ns, ns,
@ -1473,10 +1468,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
finalize, finalize,
ignore_binding, ignore_binding,
) )
} else if let Some(ribs) = ribs } else if let Some(ribs) = ribs && let Some(TypeNS | ValueNS) = opt_ns {
&& let Some(TypeNS | ValueNS) = opt_ns match self.resolve_ident_in_lexical_scope(
{
match this.resolve_ident_in_lexical_scope(
ident, ident,
ns, ns,
parent_scope, parent_scope,
@ -1487,32 +1480,26 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
// we found a locally-imported or available item/module // we found a locally-imported or available item/module
Some(LexicalScopeBinding::Item(binding)) => Ok(binding), Some(LexicalScopeBinding::Item(binding)) => Ok(binding),
// we found a local variable or type param // we found a local variable or type param
Some(LexicalScopeBinding::Res(res)) => return FindBindingResult::Res(res), Some(LexicalScopeBinding::Res(res)) => {
_ => Err(Determinacy::determined(finalize.is_some())),
}
} else {
let scopes = ScopeSet::All(ns, opt_ns.is_none());
this.early_resolve_ident_in_lexical_scope(
ident,
scopes,
parent_scope,
finalize,
finalize.is_some(),
ignore_binding,
)
};
FindBindingResult::Binding(binding)
};
let binding = match find_binding_in_ns(self, ns) {
FindBindingResult::Res(res) => {
record_segment_res(self, res); record_segment_res(self, res);
return PathResult::NonModule(PartialRes::with_unresolved_segments( return PathResult::NonModule(PartialRes::with_unresolved_segments(
res, res,
path.len() - 1, path.len() - 1,
)); ));
} }
FindBindingResult::Binding(binding) => binding, _ => Err(Determinacy::determined(finalize.is_some())),
}
} else {
self.early_resolve_ident_in_lexical_scope(
ident,
ScopeSet::All(ns, opt_ns.is_none()),
parent_scope,
finalize,
finalize.is_some(),
ignore_binding,
)
}; };
match binding { match binding {
Ok(binding) => { Ok(binding) => {
if segment_idx == 1 { if segment_idx == 1 {