diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index 56f10b03d62de..2a2e15c05ef8d 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -15,9 +15,7 @@ use crate::core::DocContext; use crate::fold::DocFolder; use crate::formats::Impl; use crate::formats::item_type::ItemType; -use crate::html::markdown::short_markdown_summary; use crate::html::render::IndexItem; -use crate::html::render::search_index::get_function_type_for_search; use crate::visit_lib::RustdocEffectiveVisibilities; /// This cache is used to store information about the [`clean::Crate`] being @@ -574,7 +572,6 @@ fn add_item_to_search_index(tcx: TyCtxt<'_>, cache: &mut Cache, item: &clean::It debug_assert!(!item.is_stripped()); - let desc = short_markdown_summary(&item.doc_value(), &item.link_names(cache)); // For searching purposes, a re-export is a duplicate if: // // - It's either an inline, or a true re-export @@ -585,31 +582,18 @@ fn add_item_to_search_index(tcx: TyCtxt<'_>, cache: &mut Cache, item: &clean::It _ => item_def_id, }; let (impl_id, trait_parent) = cache.parent_stack_last_impl_and_trait_id(); - let search_type = get_function_type_for_search( - item, + let index_item = IndexItem::new( tcx, - clean_impl_generics(cache.parent_stack.last()).as_ref(), - parent_did, cache, - ); - let aliases = item.attrs.get_doc_aliases(); - let deprecation = item.deprecation(tcx); - let index_item = IndexItem { - ty: item.type_(), - defid: Some(defid), - name, - module_path: parent_path.to_vec(), - desc, - parent: parent_did, - parent_idx: None, - trait_parent, - trait_parent_idx: None, - exact_module_path: None, + item, + Some(name), + Some(defid), + parent_path.to_vec(), + parent_did, impl_id, - search_type, - aliases, - deprecation, - }; + trait_parent, + clean_impl_generics(cache.parent_stack.last()).as_ref(), + ); cache.search_index.push(index_item); } diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 8740b5935973c..bde5f93a5c8dc 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -66,7 +66,7 @@ use tracing::{debug, info}; pub(crate) use self::context::*; pub(crate) use self::span_map::{LinkFromSrc, collect_spans_and_sources}; pub(crate) use self::write_shared::*; -use crate::clean::{self, ItemId, RenderedLink}; +use crate::clean::{self, Item, ItemId, RenderedLink}; use crate::display::{Joined as _, MaybeDisplay as _}; use crate::error::Error; use crate::formats::Impl; @@ -79,8 +79,9 @@ use crate::html::format::{ print_impl, print_path, print_type, print_where_clause, visibility_print_with_space, }; use crate::html::markdown::{ - HeadingOffset, IdMap, Markdown, MarkdownItemInfo, MarkdownSummaryLine, + HeadingOffset, IdMap, Markdown, MarkdownItemInfo, MarkdownSummaryLine, short_markdown_summary, }; +use crate::html::render::search_index::get_function_type_for_search; use crate::html::static_files::SCRAPE_EXAMPLES_HELP_MD; use crate::html::{highlight, sources}; use crate::scrape_examples::{CallData, CallLocation}; @@ -144,6 +145,43 @@ pub(crate) struct IndexItem { pub(crate) deprecation: Option, } +impl IndexItem { + pub(crate) fn new( + tcx: TyCtxt<'_>, + cache: &Cache, + item: &Item, + name: Option, + defid: Option, + module_path: Vec, + parent_did: Option, + impl_id: Option, + trait_parent: Option, + impl_generics: Option<&(clean::Type, clean::Generics)>, + ) -> Self { + let desc = short_markdown_summary(&item.doc_value(), &item.link_names(cache)); + let search_type = get_function_type_for_search(item, tcx, impl_generics, parent_did, cache); + let aliases = item.attrs.get_doc_aliases(); + let deprecation = item.deprecation(tcx); + + Self { + ty: item.type_(), + defid: defid.or_else(|| item.item_id.as_def_id()), + name: name.or(item.name).unwrap(), + module_path, + desc, + parent: parent_did, + parent_idx: None, + trait_parent, + trait_parent_idx: None, + exact_module_path: None, + impl_id, + search_type, + aliases, + deprecation, + } + } +} + /// A type used for the search index. #[derive(Clone, Debug, Eq, PartialEq)] struct RenderType { diff --git a/src/librustdoc/html/render/search_index.rs b/src/librustdoc/html/render/search_index.rs index da6840c72f5b1..269dbf3292b8c 100644 --- a/src/librustdoc/html/render/search_index.rs +++ b/src/librustdoc/html/render/search_index.rs @@ -1257,29 +1257,18 @@ pub(crate) fn build_index( &cache.orphan_impl_items { if let Some((fqp, _)) = cache.paths.get(&parent) { - let desc = short_markdown_summary(&item.doc_value(), &item.link_names(cache)); - search_index.push(IndexItem { - ty: item.type_(), - defid: item.item_id.as_def_id(), - name: item.name.unwrap(), - module_path: fqp[..fqp.len() - 1].to_vec(), - desc, - parent: Some(parent), - parent_idx: None, - trait_parent, - trait_parent_idx: None, - exact_module_path: None, + search_index.push(IndexItem::new( + tcx, + cache, + item, + None, + None, + fqp[..fqp.len() - 1].to_vec(), + None, impl_id, - search_type: get_function_type_for_search( - item, - tcx, - impl_generics.as_ref(), - Some(parent), - cache, - ), - aliases: item.attrs.get_doc_aliases(), - deprecation: item.deprecation(tcx), - }); + trait_parent, + impl_generics.as_ref(), + )); } }