Skip to content

Commit 015aa8d

Browse files
committed
Restructure a confusing match
1 parent 4e20847 commit 015aa8d

File tree

1 file changed

+62
-62
lines changed

1 file changed

+62
-62
lines changed

src/librustdoc/formats/cache.rs

+62-62
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> {
442442
}
443443

444444
fn add_item_to_search_index(tcx: TyCtxt<'_>, cache: &mut Cache, item: &clean::Item, name: Symbol) {
445-
let (parent, is_impl_child) = match *item.kind {
445+
let ((parent_did, parent_path), is_impl_child) = match *item.kind {
446446
clean::StrippedItem(..) => return,
447447
clean::AssocConstItem(..) | clean::AssocTypeItem(..)
448448
if cache.parent_stack.last().is_some_and(|parent| parent.is_trait_impl()) =>
@@ -496,77 +496,77 @@ fn add_item_to_search_index(tcx: TyCtxt<'_>, cache: &mut Cache, item: &clean::It
496496
_ => ((None, Some(&*cache.stack)), false),
497497
};
498498

499-
match parent {
500-
(parent, Some(path)) if is_impl_child || !cache.stripped_mod => {
501-
debug_assert!(!item.is_stripped());
502-
503-
// A crate has a module at its root, containing all items,
504-
// which should not be indexed. The crate-item itself is
505-
// inserted later on when serializing the search-index.
506-
if item.item_id.as_def_id().is_some_and(|idx| !idx.is_crate_root())
507-
&& let ty = item.type_()
508-
&& (ty != ItemType::StructField || u16::from_str_radix(name.as_str(), 10).is_err())
499+
if let Some(parent_did) = parent_did
500+
&& parent_path.is_none()
501+
&& is_impl_child
502+
{
503+
// We have a parent, but we don't know where they're
504+
// defined yet. Wait for later to index this item.
505+
let impl_generics = clean_impl_generics(cache.parent_stack.last());
506+
cache.orphan_impl_items.push(OrphanImplItem {
507+
parent: parent_did,
508+
item: item.clone(),
509+
impl_generics,
510+
impl_id: if let Some(ParentStackItem::Impl { item_id, .. }) = cache.parent_stack.last()
509511
{
510-
let desc = short_markdown_summary(&item.doc_value(), &item.link_names(cache));
511-
// For searching purposes, a re-export is a duplicate if:
512-
//
513-
// - It's either an inline, or a true re-export
514-
// - It's got the same name
515-
// - Both of them have the same exact path
516-
let defid = (match &*item.kind {
517-
&clean::ItemKind::ImportItem(ref import) => import.source.did,
518-
_ => None,
519-
})
520-
.or_else(|| item.item_id.as_def_id());
521-
// In case this is a field from a tuple struct, we don't add it into
522-
// the search index because its name is something like "0", which is
523-
// not useful for rustdoc search.
524-
cache.search_index.push(IndexItem {
525-
ty,
526-
defid,
527-
name,
528-
path: join_with_double_colon(path),
529-
desc,
530-
parent,
531-
parent_idx: None,
532-
exact_path: None,
533-
impl_id: if let Some(ParentStackItem::Impl { item_id, .. }) =
534-
cache.parent_stack.last()
535-
{
536-
item_id.as_def_id()
537-
} else {
538-
None
539-
},
540-
search_type: get_function_type_for_search(
541-
&item,
542-
tcx,
543-
clean_impl_generics(cache.parent_stack.last()).as_ref(),
544-
parent,
545-
cache,
546-
),
547-
aliases: item.attrs.get_doc_aliases(),
548-
deprecation: item.deprecation(tcx),
549-
});
550-
}
551-
}
552-
(Some(parent), None) if is_impl_child => {
553-
// We have a parent, but we don't know where they're
554-
// defined yet. Wait for later to index this item.
555-
let impl_generics = clean_impl_generics(cache.parent_stack.last());
556-
cache.orphan_impl_items.push(OrphanImplItem {
557-
parent,
558-
item: item.clone(),
559-
impl_generics,
512+
item_id.as_def_id()
513+
} else {
514+
None
515+
},
516+
});
517+
} else if let Some(path) = parent_path
518+
&& (is_impl_child || !cache.stripped_mod)
519+
{
520+
debug_assert!(!item.is_stripped());
521+
522+
// A crate has a module at its root, containing all items,
523+
// which should not be indexed. The crate-item itself is
524+
// inserted later on when serializing the search-index.
525+
if item.item_id.as_def_id().is_some_and(|idx| !idx.is_crate_root())
526+
&& let ty = item.type_()
527+
&& (ty != ItemType::StructField || u16::from_str_radix(name.as_str(), 10).is_err())
528+
{
529+
let desc = short_markdown_summary(&item.doc_value(), &item.link_names(cache));
530+
// For searching purposes, a re-export is a duplicate if:
531+
//
532+
// - It's either an inline, or a true re-export
533+
// - It's got the same name
534+
// - Both of them have the same exact path
535+
let defid = (match &*item.kind {
536+
&clean::ItemKind::ImportItem(ref import) => import.source.did,
537+
_ => None,
538+
})
539+
.or_else(|| item.item_id.as_def_id());
540+
// In case this is a field from a tuple struct, we don't add it into
541+
// the search index because its name is something like "0", which is
542+
// not useful for rustdoc search.
543+
cache.search_index.push(IndexItem {
544+
ty,
545+
defid,
546+
name,
547+
path: join_with_double_colon(path),
548+
desc,
549+
parent: parent_did,
550+
parent_idx: None,
551+
exact_path: None,
560552
impl_id: if let Some(ParentStackItem::Impl { item_id, .. }) =
561553
cache.parent_stack.last()
562554
{
563555
item_id.as_def_id()
564556
} else {
565557
None
566558
},
559+
search_type: get_function_type_for_search(
560+
&item,
561+
tcx,
562+
clean_impl_generics(cache.parent_stack.last()).as_ref(),
563+
parent_did,
564+
cache,
565+
),
566+
aliases: item.attrs.get_doc_aliases(),
567+
deprecation: item.deprecation(tcx),
567568
});
568569
}
569-
_ => {}
570570
}
571571
}
572572

0 commit comments

Comments
 (0)