diff --git a/compiler/rustc_resolve/src/rustdoc.rs b/compiler/rustc_resolve/src/rustdoc.rs index 3ff7d5207ac6d..969e3fa8cc472 100644 --- a/compiler/rustc_resolve/src/rustdoc.rs +++ b/compiler/rustc_resolve/src/rustdoc.rs @@ -252,9 +252,7 @@ pub struct DocStrings { /// /// The last newline is not trimmed so the produced strings are reusable between /// early and late doc link resolution regardless of their position. -pub fn prepare_to_doc_link_resolution( - doc_fragments: &[DocFragment], -) -> FxIndexMap, DocStrings> { +pub fn prepare_fragments(doc_fragments: &[DocFragment]) -> FxIndexMap, DocStrings> { let mut res: FxIndexMap, DocStrings> = FxIndexMap::default(); for fragment in doc_fragments { let out_strs = res.entry(fragment.item_id).or_default(); @@ -452,11 +450,9 @@ pub fn may_be_doc_link(link_type: LinkType) -> bool { pub(crate) fn attrs_to_preprocessed_links(attrs: &[ast::Attribute]) -> Vec> { let (doc_fragments, other_attrs) = attrs_to_doc_fragments(attrs.iter().map(|attr| (attr, None)), false); - let doc = prepare_to_doc_link_resolution(&doc_fragments).into_values().next(); - let mut links = doc - .as_ref() - .map(|doc| parse_links(&format!("{}{}", doc.outer, doc.inner))) - .unwrap_or_default(); + let doc = prepare_fragments(&doc_fragments).into_values().next(); + let mut links = + doc.map(|doc| parse_links(&format!("{}{}", doc.outer, doc.inner))).unwrap_or_default(); for attr in other_attrs { if let Some(note) = attr.deprecation_note() { diff --git a/src/librustdoc/calculate_doc_coverage.rs b/src/librustdoc/calculate_doc_coverage.rs index 3c180d9afd25d..233b30faca8d3 100644 --- a/src/librustdoc/calculate_doc_coverage.rs +++ b/src/librustdoc/calculate_doc_coverage.rs @@ -238,7 +238,9 @@ impl DocVisitor<'_> for CoverageCalculator<'_, '_> { let has_docs = !i.attrs.doc_strings.is_empty(); let mut tests = Tests { found_tests: 0 }; - find_testable_code(&i.doc_value(), &mut tests, ErrorCodes::No, None); + for text in i.doc_values().values() { + find_testable_code(&text, &mut tests, ErrorCodes::No, None); + } let has_doc_example = tests.found_tests != 0; let hir_id = DocContext::as_local_hir_id(self.ctx.tcx, i.item_id).unwrap(); diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index c34b33d9c92f5..3bed8c04f88df 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -24,7 +24,7 @@ use rustc_metadata::rendered_const; use rustc_middle::ty::fast_reject::SimplifiedType; use rustc_middle::ty::{self, Ty, TyCtxt, Visibility}; use rustc_resolve::rustdoc::{ - DocFragment, add_doc_fragment, attrs_to_doc_fragments, span_of_fragments, + DocFragment, attrs_to_doc_fragments, prepare_fragments, span_of_fragments, }; use rustc_session::Session; use rustc_span::def_id::{CRATE_DEF_ID, ModId}; @@ -125,6 +125,41 @@ impl ItemId { | ItemId::DefId(id) => id.krate, } } + + pub(crate) fn links(&self, cx: &Context<'_>) -> Vec { + use crate::html::format::{href_with_path_check, link_tooltip}; + + let Some(links) = cx.cache().intra_doc_links.get(&self) else { + return vec![]; + }; + links + .iter() + .filter_map(|ItemLink { link: s, link_text, page_id: id, fragment }| { + debug!(?id); + let Ok(HrefInfo { mut url, .. }) = href_with_path_check(*id, cx, link_text) else { + return None; + }; + debug!(?url); + match fragment { + Some(UrlFragment::Item(def_id)) => { + write!(url, "{}", crate::html::format::fragment(*def_id, cx.tcx())) + .unwrap(); + } + Some(UrlFragment::UserWritten(raw)) => { + url.push('#'); + url.push_str(raw); + } + None => {} + } + Some(RenderedLink { + original_text: s.clone(), + new_text: link_text.clone(), + tooltip: link_tooltip(*id, fragment, cx, Some(link_text)).to_string(), + href: url, + }) + }) + .collect() + } } impl From for ItemId { @@ -366,7 +401,7 @@ impl fmt::Debug for Item { fmt.field("attrs", &self.attrs).field("kind", &self.kind).field("cfg", &self.cfg); } else { fmt.field("kind", &self.type_()); - fmt.field("docs", &self.doc_value()); + fmt.field("docs", &self.doc_values().values().cloned().collect::>()); } fmt.finish() } @@ -512,16 +547,20 @@ impl Item { .unwrap_or_else(|| self.span(tcx).map_or(DUMMY_SP, |span| span.inner())) } - /// Combine all doc strings into a single value handling indentation and newlines as needed. - pub(crate) fn doc_value(&self) -> String { - self.attrs.doc_value() + /// Combine each reexport's docstrings into one docstring per item, handling indentation and + /// newlines as needed. + pub(crate) fn doc_values(&self) -> FxIndexMap, String> { + self.attrs.doc_values() } - /// Combine all doc strings into a single value handling indentation and newlines as needed. + /// Combine each reexport's docstrings into one docstring per item. + /// /// Returns `None` is there's no documentation at all, and `Some("")` if there is some /// documentation but it is empty (e.g. `#[doc = ""]`). - pub(crate) fn opt_doc_value(&self) -> Option { - self.attrs.opt_doc_value() + /// + /// The trailing newline is trimmed. + pub(crate) fn opt_doc_values(&self) -> Option, String>> { + self.attrs.opt_doc_values() } pub(crate) fn from_def_id_and_parts( @@ -564,58 +603,6 @@ impl Item { } } - /// If the item has doc comments from a reexport, returns the item id of that reexport, - /// otherwise returns returns the item id. - /// - /// This is used as a key for caching intra-doc link resolution, - /// to prevent two reexports of the same item from using the same cache. - pub(crate) fn item_or_reexport_id(&self) -> ItemId { - // added documentation on a reexport is always prepended. - self.attrs - .doc_strings - .first() - .map(|x| x.item_id) - .flatten() - .map(ItemId::from) - .unwrap_or(self.item_id) - } - - pub(crate) fn links(&self, cx: &Context<'_>) -> Vec { - use crate::html::format::{href_with_path_check, link_tooltip}; - - let Some(links) = cx.cache().intra_doc_links.get(&self.item_or_reexport_id()) else { - return vec![]; - }; - links - .iter() - .filter_map(|ItemLink { link: s, link_text, page_id: id, fragment }| { - debug!(?id); - if let Ok(HrefInfo { mut url, .. }) = href_with_path_check(*id, cx, link_text) { - debug!(?url); - match fragment { - Some(UrlFragment::Item(def_id)) => { - write!(url, "{}", crate::html::format::fragment(*def_id, cx.tcx())) - .unwrap(); - } - Some(UrlFragment::UserWritten(raw)) => { - url.push('#'); - url.push_str(raw); - } - None => {} - } - Some(RenderedLink { - original_text: s.clone(), - new_text: link_text.clone(), - tooltip: link_tooltip(*id, fragment, cx, Some(link_text)).to_string(), - href: url, - }) - } else { - None - } - }) - .collect() - } - /// Find a list of all link names, without finding their href. /// /// This is used for generating summary text, which does not include @@ -1100,22 +1087,32 @@ impl Attributes { Attributes { doc_strings, other_attrs } } - /// Combine all doc strings into a single value handling indentation and newlines as needed. - pub(crate) fn doc_value(&self) -> String { - self.opt_doc_value().unwrap_or_default() + /// Combine each reexport's docstrings into one docstring per item, handling indentation and + /// newlines as needed. + pub(crate) fn doc_values(&self) -> FxIndexMap, String> { + self.opt_doc_values().unwrap_or_default() } - /// Combine all doc strings into a single value handling indentation and newlines as needed. + /// Combine each reexport's docstrings into one docstring per item. + /// /// Returns `None` is there's no documentation at all, and `Some("")` if there is some /// documentation but it is empty (e.g. `#[doc = ""]`). - pub(crate) fn opt_doc_value(&self) -> Option { + /// + /// The trailing newline is trimmed. + pub(crate) fn opt_doc_values(&self) -> Option, String>> { (!self.doc_strings.is_empty()).then(|| { - let mut res = String::new(); - for frag in &self.doc_strings { - add_doc_fragment(&mut res, frag); - } - res.pop(); - res + prepare_fragments(&self.doc_strings) + .into_iter() + .map(|(did, mut doc)| { + if doc.inner.as_bytes().last() == Some(&b'\n') { + doc.inner.pop(); + } + if doc.outer.as_bytes().last() == Some(&b'\n') { + doc.outer.pop(); + } + (did, format!("{}{}", doc.outer, doc.inner)) + }) + .collect() }) } diff --git a/src/librustdoc/clean/types/tests.rs b/src/librustdoc/clean/types/tests.rs index 29a8fd5e2678e..9b8d5d8d1694c 100644 --- a/src/librustdoc/clean/types/tests.rs +++ b/src/librustdoc/clean/types/tests.rs @@ -22,7 +22,9 @@ fn run_test(input: &str, expected: &str) { let mut s = create_doc_fragment(input); unindent_doc_fragments(&mut s); let attrs = Attributes { doc_strings: s, other_attrs: Default::default() }; - assert_eq!(attrs.doc_value(), expected); + let doc_values = attrs.doc_values(); + assert_eq!(doc_values.len(), 1); + assert_eq!(doc_values.values().next().expect("must have exactly one doc"), expected); }); } diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index caf3fb9887c3e..519b4b6a1eb40 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -410,7 +410,7 @@ pub(crate) fn run_global_ctxt( let mut krate = tcx.sess.time("clean_crate", || clean::krate(&mut ctxt)); - if krate.module.doc_value().is_empty() { + if krate.module.doc_values().is_empty() { let help = format!( "The following guide may be of use:\n\ {}/rustdoc/how-to-write-documentation.html", diff --git a/src/librustdoc/doctest/rust.rs b/src/librustdoc/doctest/rust.rs index 00f7f471d5de0..f4357ef7d46e1 100644 --- a/src/librustdoc/doctest/rust.rs +++ b/src/librustdoc/doctest/rust.rs @@ -214,7 +214,7 @@ impl HirCollector<'_> { // The collapse-docs pass won't combine sugared/raw doc attributes, or included files with // anything else, this will combine them for us. let attrs = Attributes::from_hir(hir_attrs); - if let Some(doc) = attrs.opt_doc_value() { + for doc in attrs.doc_values().values() { let span = span_of_fragments(&attrs.doc_strings).unwrap_or(sp); self.collector.position = if span.edition().at_least_rust_2024() { span diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 88841e4d32f67..7ba22113cb023 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -253,7 +253,10 @@ impl<'tcx> Context<'tcx> { }; title.push_str(" - Rust"); let tyname = it.type_(); - let desc = plain_text_summary(&it.doc_value(), &it.link_names(self.cache())); + let desc = plain_text_summary( + &it.doc_values().values().next().map_or_default(|s| &s[..]), + &it.link_names(self.cache()), + ); let desc = if !desc.is_empty() { desc } else if it.is_crate() { diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index c2d8cc9ebae3e..b75a4b76bcd52 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -67,7 +67,7 @@ use tracing::{debug, info}; pub(crate) use self::context::*; pub(crate) use self::write_shared::*; -use crate::clean::{self, Defaultness, Item, ItemId, RenderedLink}; +use crate::clean::{self, Defaultness, Item, ItemId}; use crate::display::{Joined as _, MaybeDisplay as _}; use crate::error::Error; use crate::formats::Impl; @@ -155,7 +155,11 @@ impl IndexItemInfo { impl_generics: Option<&(clean::Type, clean::Generics)>, ty: ItemType, ) -> Self { - let desc = short_markdown_summary(&item.doc_value(), &item.link_names(cache)); + let doc_values = item.doc_values(); + let desc = short_markdown_summary( + &doc_values.values().next().map_or_default(|s| &s[..]), + &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); @@ -721,29 +725,6 @@ fn document( }) } -/// Render md_text as markdown. -fn render_markdown( - cx: &Context<'_>, - md_text: &str, - links: Vec, - heading_offset: HeadingOffset, -) -> impl fmt::Display { - fmt::from_fn(move |f| { - f.write_str("
")?; - Markdown { - content: md_text, - links: &links, - ids: &mut cx.id_map.borrow_mut(), - error_codes: cx.shared.codes, - edition: cx.shared.edition(), - playground: &cx.shared.playground, - heading_offset, - } - .write_into(&mut *f)?; - f.write_str("
") - }) -} - /// Writes a documentation block containing only the first paragraph of the documentation. If the /// docs are longer, a "Read more" link is appended to the end. fn document_short( @@ -758,10 +739,14 @@ fn document_short( if !show_def_docs { return Ok(()); } - let s = item.doc_value(); - if !s.is_empty() { + let doc_values = item.doc_values(); + let (dox, intra_doc_links) = + doc_values.iter().next().map_or_default(|(opt_item_id, dox)| { + (&dox[..], opt_item_id.map_or(item.item_id, ItemId::DefId).links(cx)) + }); + if !dox.is_empty() { let (mut summary_html, has_more_content) = - MarkdownSummaryLine(&s, &item.links(cx)).into_string_with_has_more_content(); + MarkdownSummaryLine(&dox, &intra_doc_links).into_string_with_has_more_content(); let link = if has_more_content { let link = fmt::from_fn(|f| { @@ -812,20 +797,35 @@ fn document_full_inner( heading_offset: HeadingOffset, ) -> impl fmt::Display { fmt::from_fn(move |f| { - if let Some(s) = item.opt_doc_value() { - debug!("Doc block: =====\n{s}\n====="); - if is_collapsible { - write!( - f, + if let Some(doc_values) = item.opt_doc_values() { + let close = if is_collapsible { + f.write_str( "
\ \ Expand description\ - {}
", - render_markdown(cx, &s, item.links(cx), heading_offset) +
", )?; + "
" } else { - write!(f, "{}", render_markdown(cx, &s, item.links(cx), heading_offset))?; + f.write_str("
")?; + "
" + }; + debug!("Doc block: {}\n", item.name.as_ref().map_or("[anonymous]", |nm| nm.as_str())); + for (opt_item_id, content) in doc_values.iter() { + debug!("Doc fragment: =====\n{content}\n====="); + let intra_doc_links = opt_item_id.map_or(item.item_id, ItemId::DefId).links(cx); + Markdown { + content, + links: &intra_doc_links, + ids: &mut cx.id_map.borrow_mut(), + error_codes: cx.shared.codes, + edition: cx.shared.edition(), + playground: &cx.shared.playground, + heading_offset, + } + .write_into(&mut *f)?; } + f.write_str(close)?; } let kind = match &item.kind { @@ -923,7 +923,7 @@ fn short_item_info( if let Some(note) = note { let note = note.as_str(); let mut id_map = cx.id_map.borrow_mut(); - let links = item.links(cx); + let links = item.item_id.links(cx); let html = MarkdownItemInfo::new(note, &links, &mut id_map); message.push_str(": "); html.write_into(&mut message).unwrap(); @@ -1923,7 +1923,7 @@ fn render_impl( trait_item_deprecated = it.is_deprecated(cx.tcx()); // We need the stability of the item from the trait // because impls can't have a stability. - if !item.doc_value().is_empty() { + if !item.doc_values().is_empty() { document_item_info(cx, it, Some(parent)) .render_into(&mut info_buffer)?; doc_buffer = document_full(item, cx, HeadingOffset::H5).to_string(); @@ -2303,11 +2303,16 @@ fn render_impl( let (before_dox, after_dox) = i .impl_item - .opt_doc_value() + .doc_values() + .values() + // impl blocks can't be reexported, + // because they can't be named, + // so there will only ever be at most one docblock + .next() .map(|dox| { Markdown { content: &dox, - links: &i.impl_item.links(cx), + links: &i.impl_item.item_id.links(cx), ids: &mut cx.id_map.borrow_mut(), error_codes: cx.shared.codes, edition: cx.shared.edition(), diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index 544d57d92613c..8745f399a6526 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -477,8 +477,18 @@ fn item_module(cx: &Context<'_>, item: &clean::Item, items: &[clean::Item]) -> i }; let visibility_and_hidden = visibility_and_hidden(myitem); - let docs = MarkdownSummaryLine(&myitem.doc_value(), &myitem.links(cx)) - .into_string(); + let doc_values = myitem.doc_values(); + let (dox, intra_doc_links) = + doc_values.iter().next().map_or_default(|(opt_item_id, dox)| { + ( + &dox[..], + opt_item_id + .map_or(myitem.item_id, clean::ItemId::DefId) + .links(cx), + ) + }); + + let docs = MarkdownSummaryLine(&dox, &intra_doc_links).into_string(); let (docs_before, docs_after) = if docs.is_empty() { ("", "") } else { ("
", "
") }; let deprecation_attr = deprecation_class_attr(myitem.is_deprecated(tcx)); @@ -1870,7 +1880,7 @@ fn item_variants( clean::VariantKind::Tuple(fields) => { // Documentation on tuple variant fields is rare, so to reduce noise we only emit // the section if at least one field is documented. - if fields.iter().any(|f| !f.doc_value().is_empty()) { + if fields.iter().any(|f| !f.doc_values().is_empty()) { Some(("Tuple Fields", fields)) } else { None diff --git a/src/librustdoc/html/render/search_index.rs b/src/librustdoc/html/render/search_index.rs index 38e91050fc9bc..98297586db382 100644 --- a/src/librustdoc/html/render/search_index.rs +++ b/src/librustdoc/html/render/search_index.rs @@ -1325,8 +1325,10 @@ pub(crate) fn build_index( // The crate always goes first in this list let crate_name = krate.name(tcx); - let crate_doc = - short_markdown_summary(&krate.module.doc_value(), &krate.module.link_names(cache)); + let crate_doc = short_markdown_summary( + &krate.module.doc_values().values().next().map_or_default(|s| &s[..]), + &krate.module.link_names(cache), + ); let crate_idx = { let crate_path = (ItemType::ExternCrate, vec![crate_name]); match serialized_index.crate_paths_index.entry(crate_path) { diff --git a/src/librustdoc/html/render/sidebar.rs b/src/librustdoc/html/render/sidebar.rs index 6a7d9250319aa..b8f021af57788 100644 --- a/src/librustdoc/html/render/sidebar.rs +++ b/src/librustdoc/html/render/sidebar.rs @@ -223,18 +223,25 @@ fn docblock_toc<'a>( it: &'a clean::Item, ids: &mut IdMap, ) -> Option> { - let (toc, _) = MarkdownWithToc { - content: &it.doc_value(), - links: &it.links(cx), - ids, - error_codes: cx.shared.codes, - edition: cx.shared.edition(), - playground: &cx.shared.playground, - } - .into_parts(); - let links: Vec> = toc - .entries - .into_iter() + let links: Vec> = it + .doc_values() + .iter() + .map(|(opt_item_id, content)| { + let intra_doc_links = opt_item_id.map_or(it.item_id, clean::ItemId::DefId).links(cx); + MarkdownWithToc { + content: &content, + links: &intra_doc_links, + ids, + error_codes: cx.shared.codes, + edition: cx.shared.edition(), + playground: &cx.shared.playground, + } + .into_parts() + .0 + .entries + .into_iter() + }) + .flatten() .map(|entry| { Link { name_html: if entry.html == entry.name { None } else { Some(entry.html.into()) }, diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs index f4cecb08bb982..5cbe153a841a5 100644 --- a/src/librustdoc/json/conversions.rs +++ b/src/librustdoc/json/conversions.rs @@ -28,23 +28,29 @@ use crate::passes::collect_intra_doc_links::UrlFragment; impl JsonRenderer<'_> { pub(super) fn convert_item(&self, item: &clean::Item) -> Option { let deprecation = item.deprecation(self.tcx); - let links = self - .cache - .intra_doc_links - .get(&item.item_id) + let docs = item + .doc_values() .into_iter() - .flatten() - .map(|clean::ItemLink { link, page_id, fragment, .. }| { - let id = match fragment { - Some(UrlFragment::Item(frag_id)) => *frag_id, - // FIXME: Pass the `UserWritten` segment to JSON consumer. - Some(UrlFragment::UserWritten(_)) | None => *page_id, - }; - - (String::from(&**link), self.id_from_item_default(id.into())) + .map(|(opt_def_id, text)| { + let links = self + .cache + .intra_doc_links + .get(&opt_def_id.map_or(item.item_id, ItemId::DefId)) + .into_iter() + .flatten() + .map(|clean::ItemLink { link, page_id, fragment, .. }| { + let id = match fragment { + Some(UrlFragment::Item(frag_id)) => *frag_id, + // FIXME: Pass the `UserWritten` segment to JSON consumer. + Some(UrlFragment::UserWritten(_)) | None => *page_id, + }; + + (String::from(&**link), self.id_from_item_default(id.into())) + }) + .collect(); + Doc { links, text } }) - .collect(); - let docs = item.opt_doc_value(); + .collect::>(); let attrs = item .attrs .other_attrs @@ -111,7 +117,6 @@ impl JsonRenderer<'_> { attrs, deprecation: deprecation.into_json(self), inner, - links, }) } diff --git a/src/librustdoc/json/mod.rs b/src/librustdoc/json/mod.rs index bdd2b7d416d80..2d0d6a086b104 100644 --- a/src/librustdoc/json/mod.rs +++ b/src/librustdoc/json/mod.rs @@ -443,6 +443,6 @@ mod size_asserts { // tidy-alphabetical-end // These contains a `PathBuf`, which is different sizes on different OSes. - static_assert_size!(Item, 544 + size_of::()); + static_assert_size!(Item, 512 + size_of::()); static_assert_size!(ExternalCrate, 48 + size_of::()); } diff --git a/src/librustdoc/passes/check_doc_test_visibility.rs b/src/librustdoc/passes/check_doc_test_visibility.rs index 17fe0cae47b76..0bd0a5ef276cf 100644 --- a/src/librustdoc/passes/check_doc_test_visibility.rs +++ b/src/librustdoc/passes/check_doc_test_visibility.rs @@ -30,7 +30,14 @@ pub(super) fn check_doc_test_visibility(krate: Crate, cx: &mut DocContext<'_>) - impl DocVisitor<'_> for DocTestVisibilityLinter<'_, '_> { fn visit_item(&mut self, item: &Item) { - look_for_tests(self.cx, &item.doc_value(), item); + let doc_values = item.doc_values(); + if doc_values.is_empty() { + look_for_tests(self.cx, "", item); + } else { + for text in doc_values.values() { + look_for_tests(self.cx, &text, item); + } + } self.visit_item_recur(item) } diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 78e7bcdbd7b01..f085ec104ec77 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -22,7 +22,7 @@ use rustc_middle::ty::{Ty, TyCtxt}; use rustc_resolve::rustdoc::pulldown_cmark::LinkType; use rustc_resolve::rustdoc::{ DocStrings, MalformedGenerics, has_primitive_or_keyword_or_attribute_docs_hir, - prepare_to_doc_link_resolution, source_span_for_markdown_range, strip_generics_from_path, + prepare_fragments, source_span_for_markdown_range, strip_generics_from_path, }; use rustc_span::def_id::ModId; use rustc_span::edit_distance::find_best_match_for_name; @@ -1098,7 +1098,7 @@ impl LinkCollector<'_, '_> { self.cx .cache .intra_doc_links - .entry(item.item_or_reexport_id()) + .entry(ItemId::DefId(item_id)) .or_default() .insert(link); } @@ -1138,7 +1138,7 @@ impl LinkCollector<'_, '_> { // In the presence of re-exports, this is not the same as the module of the item. // Rather than merging all documentation into one, resolve it one attribute at a time // so we know which module it came from. - for (item_id, doc) in prepare_to_doc_link_resolution(&item.attrs.doc_strings) { + for (item_id, doc) in prepare_fragments(&item.attrs.doc_strings).iter() { if !may_have_doc_links(&doc.inner) && !may_have_doc_links(&doc.outer) { continue; } diff --git a/src/librustdoc/passes/lint.rs b/src/librustdoc/passes/lint.rs index 9988aa683d6d6..65594f93a4392 100644 --- a/src/librustdoc/passes/lint.rs +++ b/src/librustdoc/passes/lint.rs @@ -27,8 +27,15 @@ impl DocVisitor<'_> for Linter<'_, '_> { // If non-local, no need to check anything. return; }; - let dox = item.doc_value(); - if !dox.is_empty() { + for (def_id, dox) in item.doc_values().iter() { + if dox.is_empty() { + continue; + } + if let Some(def_id) = def_id + && !def_id.is_local() + { + continue; + } let may_have_link = dox.contains(&[':', '['][..]); let may_have_block_comment_or_html = dox.contains(['<', '>']); let may_have_table = dox.contains(&['|'][..]); diff --git a/src/librustdoc/passes/lint/redundant_explicit_links.rs b/src/librustdoc/passes/lint/redundant_explicit_links.rs index e02fbae3e0568..2369b3bb45078 100644 --- a/src/librustdoc/passes/lint/redundant_explicit_links.rs +++ b/src/librustdoc/passes/lint/redundant_explicit_links.rs @@ -9,7 +9,7 @@ use rustc_middle::middle::resolve::DocLinkResMap; use rustc_resolve::rustdoc::pulldown_cmark::{ BrokenLink, BrokenLinkCallback, CowStr, Event, LinkType, OffsetIter, Parser, Tag, }; -use rustc_resolve::rustdoc::{prepare_to_doc_link_resolution, source_span_for_markdown_range}; +use rustc_resolve::rustdoc::{prepare_fragments, source_span_for_markdown_range}; use rustc_span::def_id::{DefId, ModId}; use rustc_span::{Span, Symbol}; @@ -28,7 +28,7 @@ struct LinkData { } pub(crate) fn visit_item(cx: &DocContext<'_>, item: &Item, hir_id: HirId) { - let hunks = prepare_to_doc_link_resolution(&item.attrs.doc_strings); + let hunks = prepare_fragments(&item.attrs.doc_strings); for (item_id, doc) in hunks { if let Some(item_id) = item_id.or(item.def_id()) { if !doc.outer.is_empty() || !doc.inner.is_empty() { diff --git a/src/librustdoc/passes/stripper.rs b/src/librustdoc/passes/stripper.rs index 45bfb519cf4f5..204838fd4987e 100644 --- a/src/librustdoc/passes/stripper.rs +++ b/src/librustdoc/passes/stripper.rs @@ -227,7 +227,7 @@ impl DocFolder for ImplStripper<'_, '_> { { debug!("ImplStripper: no public item; removing {imp:?}"); return None; - } else if imp.items.is_empty() && i.doc_value().is_empty() { + } else if imp.items.is_empty() && i.doc_values().is_empty() { debug!("ImplStripper: no item and no doc; removing {imp:?}"); return None; } diff --git a/src/rustdoc-json-types/lib.rs b/src/rustdoc-json-types/lib.rs index 29ac079b6cc44..67f25121ff6e0 100644 --- a/src/rustdoc-json-types/lib.rs +++ b/src/rustdoc-json-types/lib.rs @@ -114,8 +114,8 @@ pub type FxHashMap = HashMap; // re-export for use in src/librustdoc // will instead cause conflicts. See #94591 for more. (This paragraph and the "Latest feature" line // are deliberately not in a doc comment, because they need not be in public docs.) // -// Latest feature: Make `Stability` work with non-self-describing formats -pub const FORMAT_VERSION: u32 = 61; +// Latest feature: parse reexport and item docs separately +pub const FORMAT_VERSION: u32 = 62; /// The root of the emitted JSON blob. /// @@ -254,6 +254,19 @@ pub struct ItemSummary { pub kind: ItemKind, } +/// A Markdown document with resolved links. +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[cfg_attr(feature = "rkyv_0_8", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize))] +#[cfg_attr(feature = "rkyv_0_8", rkyv(derive(Debug)))] +pub struct Doc { + /// The text, with postprocessing and concatenation performed so that the document can be + /// parsed with a pulldown-cmark, commonmark-hs, or another Markdown processor that + /// implements CommonMark with GFM extensions. + pub text: String, + /// This mapping resolves [intra-doc links](https://rust-lang.github.io/rfcs/1946-intra-rustdoc-links.html) from the docstring to their IDs + pub links: HashMap, +} + /// Anything that can hold documentation - modules, structs, enums, functions, traits, etc. /// /// The `Item` data type holds fields that can apply to any of these, @@ -275,11 +288,31 @@ pub struct Item { /// By default all documented items are public, but you can tell rustdoc to output private items /// so this field is needed to differentiate. pub visibility: Visibility, - /// The full markdown docstring of this item. Absent if there is no documentation at all, - /// Some("") if there is some documentation but it is empty (EG `#[doc = ""]`). - pub docs: Option, - /// This mapping resolves [intra-doc links](https://rust-lang.github.io/rfcs/1946-intra-rustdoc-links.html) from the docstring to their IDs - pub links: HashMap, + /// The full markdown docstring of this item. Empty if there is no documentation at all, + /// `vec![Doc { text: "" }]` if there is some documentation but it is empty (EG `#[doc = ""]`), + /// and multiple items if a reexport and the original both have docstrings. + /// + /// ```rust + /// /// Reexport docs + /// pub use Thing1 as Thing2; + /// + /// /// Original docs + /// pub struct Thing1; + /// ``` + /// + /// ```json + /// { + /// "name": "Thing2", + /// "docs": [ + /// { "text": "Reexport docs", "links": [] }, + /// { "text": "Original docs", "links": [] }, + /// ], + /// ... + /// } + /// ``` + /// + /// No particular order is guaranteed. + pub docs: Vec, /// Attributes on this item. /// /// Does not include: diff --git a/src/tools/jsondoclint/src/validator.rs b/src/tools/jsondoclint/src/validator.rs index 76a47c4f4fecf..03efba7c7f379 100644 --- a/src/tools/jsondoclint/src/validator.rs +++ b/src/tools/jsondoclint/src/validator.rs @@ -88,7 +88,9 @@ impl<'a> Validator<'a> { fn check_item(&mut self, id: &'a Id) { if let Some(item) = &self.krate.index.get(id) { - item.links.values().for_each(|id| self.add_any_id(id)); + for doc in &item.docs { + doc.links.values().for_each(|id| self.add_any_id(id)); + } match &item.inner { ItemEnum::Use(x) => self.check_use(x), diff --git a/src/tools/jsondoclint/src/validator/tests.rs b/src/tools/jsondoclint/src/validator/tests.rs index f9b54a2cc0936..90b0a520407c6 100644 --- a/src/tools/jsondoclint/src/validator/tests.rs +++ b/src/tools/jsondoclint/src/validator/tests.rs @@ -1,6 +1,6 @@ use rustc_hash::FxHashMap; use rustdoc_json_types::{ - Abi, FORMAT_VERSION, FunctionHeader, Item, ItemKind, ProvidedDefaultUnstable, Visibility, + Abi, Doc, FORMAT_VERSION, FunctionHeader, Item, ItemKind, ProvidedDefaultUnstable, Visibility, }; use super::*; @@ -31,8 +31,10 @@ fn errors_on_missing_links() { crate_id: 0, span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::from_iter([("Not Found".to_owned(), Id(1))]), + docs: vec![Doc { + text: String::new(), + links: FxHashMap::from_iter([("Not Found".to_owned(), Id(1))]), + }], attrs: vec![], deprecation: None, stability: None, @@ -56,6 +58,8 @@ fn errors_on_missing_links() { kind: ErrorKind::NotFound(vec![vec![ SelectorPart::Field("index".to_owned()), SelectorPart::Field("0".to_owned()), + SelectorPart::Field("docs".to_owned()), + SelectorPart::Index(0), SelectorPart::Field("links".to_owned()), SelectorPart::Field("Not Found".to_owned()), ]]), @@ -81,8 +85,10 @@ fn errors_on_local_in_paths_and_not_index() { name: Some("microcore".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::from_iter([("prim@i32".to_owned(), Id(2))]), + docs: vec![Doc { + text: String::new(), + links: FxHashMap::from_iter([("prim@i32".to_owned(), Id(2))]), + }], attrs: Vec::new(), deprecation: None, stability: None, @@ -102,8 +108,7 @@ fn errors_on_local_in_paths_and_not_index() { name: Some("i32".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::default(), + docs: Vec::new(), attrs: Vec::new(), deprecation: None, stability: None, @@ -157,8 +162,7 @@ fn errors_on_missing_path() { name: Some("foo".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::default(), + docs: Vec::new(), attrs: Vec::new(), deprecation: None, stability: None, @@ -178,8 +182,7 @@ fn errors_on_missing_path() { name: Some("Bar".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::default(), + docs: Vec::new(), attrs: Vec::new(), deprecation: None, stability: None, @@ -199,8 +202,7 @@ fn errors_on_missing_path() { name: Some("mk_bar".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::default(), + docs: Vec::new(), attrs: Vec::new(), deprecation: None, stability: None, @@ -264,8 +266,7 @@ fn krate_with_trait_item(inner: ItemEnum) -> Crate { name: Some("root".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::default(), + docs: Vec::new(), attrs: Vec::new(), deprecation: None, stability: None, @@ -285,8 +286,7 @@ fn krate_with_trait_item(inner: ItemEnum) -> Crate { name: Some("Trait".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::default(), + docs: Vec::new(), attrs: Vec::new(), deprecation: None, stability: None, @@ -310,8 +310,7 @@ fn krate_with_trait_item(inner: ItemEnum) -> Crate { name: Some("TraitItem".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::default(), + docs: Vec::new(), attrs: Vec::new(), deprecation: None, stability: None, @@ -413,8 +412,7 @@ fn checks_local_crate_id_is_correct() { name: Some("irrelavent".to_owned()), span: None, visibility: Visibility::Public, - docs: None, - links: FxHashMap::default(), + docs: Vec::new(), attrs: Vec::new(), deprecation: None, stability: None, diff --git a/tests/rustdoc-html/inline_cross/add-docs.rs b/tests/rustdoc-html/inline_cross/add-docs.rs index d4e0c53907064..0b391126b91c9 100644 --- a/tests/rustdoc-html/inline_cross/add-docs.rs +++ b/tests/rustdoc-html/inline_cross/add-docs.rs @@ -4,6 +4,7 @@ extern crate inner; //@ has add_docs/struct.MyStruct.html -//@ hasraw add_docs/struct.MyStruct.html "Doc comment from ‘pub use’, Doc comment from definition" +//@ hasraw add_docs/struct.MyStruct.html "Doc comment from ‘pub use’," +//@ hasraw add_docs/struct.MyStruct.html "Doc comment from definition" /// Doc comment from 'pub use', pub use inner::MyStruct; diff --git a/tests/rustdoc-html/private/inline-private-with-intermediate-doc-hidden.rs b/tests/rustdoc-html/private/inline-private-with-intermediate-doc-hidden.rs index d27ecbad1690e..b70e454ac5893 100644 --- a/tests/rustdoc-html/private/inline-private-with-intermediate-doc-hidden.rs +++ b/tests/rustdoc-html/private/inline-private-with-intermediate-doc-hidden.rs @@ -9,7 +9,7 @@ //@ count - '//*[@id="main-content"]/*[@class="section-header"]' 1 //@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs' //@ has - '//*[@id="main-content"]//a[@href="struct.Reexport.html"]' 'Reexport' -//@ has - '//*[@id="main-content"]//dd' 'Visible. Original.' +//@ has - '//*[@id="main-content"]//dd' 'Visible.' mod private { /// Original. diff --git a/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Bar.docblock.html b/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Bar.docblock.html new file mode 100644 index 0000000000000..ec032737b02bf --- /dev/null +++ b/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Bar.docblock.html @@ -0,0 +1,2 @@ +

Displayed

+
\ No newline at end of file diff --git a/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Bar2.docblock.html b/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Bar2.docblock.html new file mode 100644 index 0000000000000..b2e9e0b55d4b4 --- /dev/null +++ b/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Bar2.docblock.html @@ -0,0 +1,3 @@ +

Hello

+

Displayed

+
\ No newline at end of file diff --git a/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Public.docblock.html b/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Public.docblock.html new file mode 100644 index 0000000000000..24b9cd32d0b3a --- /dev/null +++ b/tests/rustdoc-html/reexport/attributes-inlining-108281.fn.Public.docblock.html @@ -0,0 +1,2 @@ +

Public

+
\ No newline at end of file diff --git a/tests/rustdoc-html/reexport/attributes-inlining-108281.rs b/tests/rustdoc-html/reexport/attributes-inlining-108281.rs index 9dfaf1a6846f3..d2b9420f5f3fc 100644 --- a/tests/rustdoc-html/reexport/attributes-inlining-108281.rs +++ b/tests/rustdoc-html/reexport/attributes-inlining-108281.rs @@ -15,7 +15,7 @@ mod sub { /// Displayed #[doc(inline)] pub use crate::bar as Bar; -//@ matches - '//dd' '^Hello\sDisplayed$' +//@ matches - '//dd' '^Hello$' #[doc(inline)] /// Hello pub use crate::Bar as Bar2; @@ -23,3 +23,15 @@ pub use crate::Bar as Bar2; //@ matches - '//dd' '^Public$' /// Public pub use crate::sub::public as Public; + +//@ has 'foo/fn.Bar.html' +//@ matches - '//div[@class="docblock"]' '^Displayed$' +//@ snapshot fn.Bar.docblock - '//div[@class="docblock"]' + +//@ has 'foo/fn.Bar2.html' +//@ matches - '//div[@class="docblock"]' '^Hello|Displayed$' +//@ snapshot fn.Bar2.docblock - '//div[@class="docblock"]' + +//@ has 'foo/fn.Public.html' +//@ matches - '//div[@class="docblock"]' '^Public$' +//@ snapshot fn.Public.docblock - '//div[@class="docblock"]' diff --git a/tests/rustdoc-html/reexport/doc-hidden-reexports-109449.rs b/tests/rustdoc-html/reexport/doc-hidden-reexports-109449.rs index 78b9214300a95..ce8bc26863b1c 100644 --- a/tests/rustdoc-html/reexport/doc-hidden-reexports-109449.rs +++ b/tests/rustdoc-html/reexport/doc-hidden-reexports-109449.rs @@ -134,7 +134,11 @@ pub mod doc_hidden_reexport { //@ count - '//dt' 1 //@ has - '//a[@class="struct"]' 'Reexport' // Check that the `#[doc(hidden)]` re-export's attributes are not taken into account. - //@ has - '//dd' 'Visible. Original.' + //@ has - '//dd' 'Visible.' + + //@ has 'foo/doc_hidden_reexport/struct.Reexport.html' + //@ has - '//div[@class="docblock"]/p' 'Visible.' + //@ has - '//div[@class="docblock"]/p' 'Original.' /// Visible. pub use self::Bar3 as Reexport; /// Hidden. diff --git a/tests/rustdoc-html/reexport/link-with-same-name-but-different-destination.rs b/tests/rustdoc-html/reexport/link-with-same-name-but-different-destination.rs new file mode 100644 index 0000000000000..665a128abd0a8 --- /dev/null +++ b/tests/rustdoc-html/reexport/link-with-same-name-but-different-destination.rs @@ -0,0 +1,25 @@ +// This test checks two different intra-doc links, +// with the same refdef name, can point at different places. + +#![crate_name = "foo"] + +//@ has 'foo/index.html' + +pub mod one { + use crate::one as my_mod; + //@ has 'foo/one/struct.A.html' + //@ has - '//a[@href="index.html"]' 'there' + //@ !has - '//a[@href="../two/index.html"]' 'local' + /// Link [there][my_mod]. + pub struct A; +} + +pub mod two { + use crate::two as my_mod; + //@ has 'foo/two/struct.A.html' + //@ has - '//a[@href="../one/index.html"]' 'there' + //@ has - '//a[@href="index.html"]' 'local' + /// Link [local][my_mod]. + #[doc(inline)] + pub use crate::one::A; +} diff --git a/tests/rustdoc-html/reexport/merge-glob-and-non-glob.rs b/tests/rustdoc-html/reexport/merge-glob-and-non-glob.rs index ff67859cb39af..770be22b2d4ad 100644 --- a/tests/rustdoc-html/reexport/merge-glob-and-non-glob.rs +++ b/tests/rustdoc-html/reexport/merge-glob-and-non-glob.rs @@ -13,8 +13,8 @@ // We should also only have one section (Structs). //@ count - '//h2[@class="section-header"]' 1 // We now check the short docs. -//@ has - '//dl[@class="item-table"]/dd' 'Foobar Blob' -//@ has - '//dl[@class="item-table"]/dd' 'Tarte Tatin' +//@ has - '//dl[@class="item-table"]/dd' 'Foobar' +//@ has - '//dl[@class="item-table"]/dd' 'Tarte' //@ has 'foo/struct.Foo.html' //@ has - '//*[@class="docblock"]' 'Foobar Blob' diff --git a/tests/rustdoc-html/reexport/transient-reexports.rs b/tests/rustdoc-html/reexport/transient-reexports.rs index 1ce6b67aa3ccf..cc915aacf16b3 100644 --- a/tests/rustdoc-html/reexport/transient-reexports.rs +++ b/tests/rustdoc-html/reexport/transient-reexports.rs @@ -15,7 +15,10 @@ extern crate bar; //@ count - '//dl/[@class="item-table"]/dd' 1 //@ has - '//dl/[@class="item-table"]/dt/a[@href="struct.Type.html"]' 'Type' // We should have "foo", "bar" and "baz" (one fragment in each crate reexport). -//@ has - '//dl/[@class="item-table"]/dd' 'foo bar baz' +//@ has - '//dl/[@class="item-table"]/dd' 'foo' + +//@ has 'foo/struct.Type.html' +//@ has - '//div[@class="docblock"]' 'foo bar baz' /// foo pub use bar::Type; diff --git a/tests/rustdoc-json/assoc_items.rs b/tests/rustdoc-json/assoc_items.rs index f47a522e81a4a..b98aeb78cdc6f 100644 --- a/tests/rustdoc-json/assoc_items.rs +++ b/tests/rustdoc-json/assoc_items.rs @@ -8,27 +8,27 @@ impl Simple { } pub trait EasyToImpl { - //@ has "$.index[?(@.docs=='ToDeclare trait')].inner.assoc_type" - //@ is "$.index[?(@.docs=='ToDeclare trait')].inner.assoc_type.type" null - //@ is "$.index[?(@.docs=='ToDeclare trait')].inner.assoc_type.bounds" [] + //@ has "$.index[?(@.docs[0].text=='ToDeclare trait')].inner.assoc_type" + //@ is "$.index[?(@.docs[0].text=='ToDeclare trait')].inner.assoc_type.type" null + //@ is "$.index[?(@.docs[0].text=='ToDeclare trait')].inner.assoc_type.bounds" [] /// ToDeclare trait type ToDeclare; - //@ has "$.index[?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const" - //@ is "$.index[?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const.value" null - //@ is "$.index[?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const.type.primitive" '"usize"' + //@ has "$.index[?(@.docs[0].text=='AN_ATTRIBUTE trait')].inner.assoc_const" + //@ is "$.index[?(@.docs[0].text=='AN_ATTRIBUTE trait')].inner.assoc_const.value" null + //@ is "$.index[?(@.docs[0].text=='AN_ATTRIBUTE trait')].inner.assoc_const.type.primitive" '"usize"' /// AN_ATTRIBUTE trait const AN_ATTRIBUTE: usize; } impl EasyToImpl for Simple { - //@ has "$.index[?(@.docs=='ToDeclare impl')].inner.assoc_type" - //@ is "$.index[?(@.docs=='ToDeclare impl')].inner.assoc_type.type.primitive" \"usize\" + //@ has "$.index[?(@.docs[0].text=='ToDeclare impl')].inner.assoc_type" + //@ is "$.index[?(@.docs[0].text=='ToDeclare impl')].inner.assoc_type.type.primitive" \"usize\" /// ToDeclare impl type ToDeclare = usize; - //@ has "$.index[?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const" - //@ is "$.index[?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const.type.primitive" \"usize\" - //@ is "$.index[?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const.value" \"12\" + //@ has "$.index[?(@.docs[0].text=='AN_ATTRIBUTE impl')].inner.assoc_const" + //@ is "$.index[?(@.docs[0].text=='AN_ATTRIBUTE impl')].inner.assoc_const.type.primitive" \"usize\" + //@ is "$.index[?(@.docs[0].text=='AN_ATTRIBUTE impl')].inner.assoc_const.value" \"12\" /// AN_ATTRIBUTE impl const AN_ATTRIBUTE: usize = 12; } diff --git a/tests/rustdoc-json/attrs/stability/const_traits.rs b/tests/rustdoc-json/attrs/stability/const_traits.rs index fcad96b71f347..bffe58dcc98b1 100644 --- a/tests/rustdoc-json/attrs/stability/const_traits.rs +++ b/tests/rustdoc-json/attrs/stability/const_traits.rs @@ -29,15 +29,15 @@ impl InherentConstMethodTarget { #[rustc_const_unstable(feature = "const_trait_const_feature", issue = "none")] pub const trait ConstTrait { // This item is *not* usable in a const context, because its parent is const-unstable. - //@ is "$.index[?(@.docs=='assoc type inside const trait')].const_stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='assoc type inside const trait')].const_stability.feature" '"const_trait_const_feature"' + //@ is "$.index[?(@.docs[0].text=='assoc type inside const trait')].const_stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='assoc type inside const trait')].const_stability.feature" '"const_trait_const_feature"' /// assoc type inside const trait #[stable(feature = "trait_assoc_type_feature", since = "2.1.0")] type TraitAssocType; // This item is also *not* usable in a const context, because its parent is const-unstable. - //@ is "$.index[?(@.docs=='method inside const trait')].const_stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='method inside const trait')].const_stability.feature" '"const_trait_const_feature"' + //@ is "$.index[?(@.docs[0].text=='method inside const trait')].const_stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='method inside const trait')].const_stability.feature" '"const_trait_const_feature"' /// method inside const trait #[stable(feature = "trait_method_feature", since = "2.2.0")] fn trait_method(&self); @@ -45,7 +45,7 @@ pub const trait ConstTrait { // An associated const can't be const-unstable. // It is usable in a const context *regardless* of the fact its parent is const-unstable. // See the UI test in `tests/ui/traits/const-traits/associated-const-stability.rs` for proof. - //@ is "$.index[?(@.docs=='assoc const inside const trait')].const_stability" null + //@ is "$.index[?(@.docs[0].text=='assoc const inside const trait')].const_stability" null /// assoc const inside const trait #[stable(feature = "trait_assoc_const_feature", since = "2.3.0")] const TRAIT_ASSOC_CONST: usize; @@ -68,30 +68,30 @@ pub const trait ConstTraitWithUnstableMethod { fn unstable_method_without_const_gate(&self); } -//@ is "$.index[?(@.docs=='const trait impl')].stability.feature" '"const_trait_impl_feature"' -//@ is "$.index[?(@.docs=='const trait impl')].stability.level.stable.since" '"3.0.0"' -//@ is "$.index[?(@.docs=='const trait impl')].const_stability.level" '"unstable"' -//@ is "$.index[?(@.docs=='const trait impl')].const_stability.feature" '"const_trait_impl_const_feature"' +//@ is "$.index[?(@.docs[0].text=='const trait impl')].stability.feature" '"const_trait_impl_feature"' +//@ is "$.index[?(@.docs[0].text=='const trait impl')].stability.level.stable.since" '"3.0.0"' +//@ is "$.index[?(@.docs[0].text=='const trait impl')].const_stability.level" '"unstable"' +//@ is "$.index[?(@.docs[0].text=='const trait impl')].const_stability.feature" '"const_trait_impl_const_feature"' /// const trait impl #[stable(feature = "const_trait_impl_feature", since = "3.0.0")] #[rustc_const_unstable(feature = "const_trait_impl_const_feature", issue = "none")] const impl ConstTrait for ConstTraitTarget { // This item is *not* usable in a const context, because its parent is const-unstable. - //@ is "$.index[?(@.docs=='assoc type inside const trait impl')].const_stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='assoc type inside const trait impl')].const_stability.feature" '"const_trait_impl_const_feature"' + //@ is "$.index[?(@.docs[0].text=='assoc type inside const trait impl')].const_stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='assoc type inside const trait impl')].const_stability.feature" '"const_trait_impl_const_feature"' /// assoc type inside const trait impl type TraitAssocType = usize; // This item is also *not* usable in a const context, because its parent is const-unstable. - //@ is "$.index[?(@.docs=='method inside const trait impl')].const_stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='method inside const trait impl')].const_stability.feature" '"const_trait_impl_const_feature"' + //@ is "$.index[?(@.docs[0].text=='method inside const trait impl')].const_stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='method inside const trait impl')].const_stability.feature" '"const_trait_impl_const_feature"' /// method inside const trait impl fn trait_method(&self) {} // An associated const can't be const-unstable. // It is usable in a const context *regardless* of the fact its parent is const-unstable. // See the UI test in `tests/ui/traits/const-traits/associated-const-stability.rs` for proof. - //@ is "$.index[?(@.docs=='assoc const inside const trait impl')].const_stability" null + //@ is "$.index[?(@.docs[0].text=='assoc const inside const trait impl')].const_stability" null /// assoc const inside const trait impl const TRAIT_ASSOC_CONST: usize = 0; } @@ -106,17 +106,17 @@ const impl ConstTrait for ConstTraitTarget { #[stable(feature = "const_stable_trait_feature", since = "4.0.0")] #[rustc_const_stable(feature = "const_stable_trait_const_feature", since = "4.0.0")] pub const trait ConstStableTrait { - //@ is "$.index[?(@.docs=='assoc type inside const-stable trait')].const_stability" null + //@ is "$.index[?(@.docs[0].text=='assoc type inside const-stable trait')].const_stability" null /// assoc type inside const-stable trait #[stable(feature = "stable_trait_assoc_type_feature", since = "4.1.0")] type StableTraitAssocType; - //@ is "$.index[?(@.docs=='method inside const-stable trait')].const_stability" null + //@ is "$.index[?(@.docs[0].text=='method inside const-stable trait')].const_stability" null /// method inside const-stable trait #[stable(feature = "stable_trait_method_feature", since = "4.2.0")] fn stable_trait_method(&self); - //@ is "$.index[?(@.docs=='assoc const inside const-stable trait')].const_stability" null + //@ is "$.index[?(@.docs[0].text=='assoc const inside const-stable trait')].const_stability" null /// assoc const inside const-stable trait #[stable(feature = "stable_trait_assoc_const_feature", since = "4.3.0")] const STABLE_TRAIT_ASSOC_CONST: usize; @@ -125,23 +125,23 @@ pub const trait ConstStableTrait { // The `const impl` is const-stable. We indicate that *once* on the impl itself, but since // there are no special cases here (unlike in the const-unstable case with associated consts) // we do not duplicate the const-stability to all the associated items so as not to bloat the JSON. -//@ is "$.index[?(@.docs=='const-stable trait impl')].stability.feature" '"const_stable_trait_impl_feature"' -//@ is "$.index[?(@.docs=='const-stable trait impl')].stability.level.stable.since" '"5.0.0"' -//@ is "$.index[?(@.docs=='const-stable trait impl')].const_stability.feature" '"const_stable_trait_impl_const_feature"' -//@ is "$.index[?(@.docs=='const-stable trait impl')].const_stability.level.stable.since" '"5.0.0"' +//@ is "$.index[?(@.docs[0].text=='const-stable trait impl')].stability.feature" '"const_stable_trait_impl_feature"' +//@ is "$.index[?(@.docs[0].text=='const-stable trait impl')].stability.level.stable.since" '"5.0.0"' +//@ is "$.index[?(@.docs[0].text=='const-stable trait impl')].const_stability.feature" '"const_stable_trait_impl_const_feature"' +//@ is "$.index[?(@.docs[0].text=='const-stable trait impl')].const_stability.level.stable.since" '"5.0.0"' /// const-stable trait impl #[stable(feature = "const_stable_trait_impl_feature", since = "5.0.0")] #[rustc_const_stable(feature = "const_stable_trait_impl_const_feature", since = "5.0.0")] const impl ConstStableTrait for ConstStableTraitTarget { - //@ is "$.index[?(@.docs=='assoc type inside const-stable trait impl')].const_stability" null + //@ is "$.index[?(@.docs[0].text=='assoc type inside const-stable trait impl')].const_stability" null /// assoc type inside const-stable trait impl type StableTraitAssocType = usize; - //@ is "$.index[?(@.docs=='method inside const-stable trait impl')].const_stability" null + //@ is "$.index[?(@.docs[0].text=='method inside const-stable trait impl')].const_stability" null /// method inside const-stable trait impl fn stable_trait_method(&self) {} - //@ is "$.index[?(@.docs=='assoc const inside const-stable trait impl')].const_stability" null + //@ is "$.index[?(@.docs[0].text=='assoc const inside const-stable trait impl')].const_stability" null /// assoc const inside const-stable trait impl const STABLE_TRAIT_ASSOC_CONST: usize = 1; } diff --git a/tests/rustdoc-json/attrs/stability/default_body.rs b/tests/rustdoc-json/attrs/stability/default_body.rs index 5a70e47d6c505..5a6a7189fb3b2 100644 --- a/tests/rustdoc-json/attrs/stability/default_body.rs +++ b/tests/rustdoc-json/attrs/stability/default_body.rs @@ -2,49 +2,49 @@ #[stable(feature = "default_body_trait_feature", since = "1.0.0")] pub trait TraitWithDefaults { - //@ is "$.index[?(@.docs=='method with unstable default body')].inner.function.has_body" true - //@ is "$.index[?(@.docs=='method with unstable default body')].inner.function.default_unstable.feature" '"method_default_body_feature"' - //@ is "$.index[?(@.docs=='method with unstable default body')].attrs" [] + //@ is "$.index[?(@.docs[0].text=='method with unstable default body')].inner.function.has_body" true + //@ is "$.index[?(@.docs[0].text=='method with unstable default body')].inner.function.default_unstable.feature" '"method_default_body_feature"' + //@ is "$.index[?(@.docs[0].text=='method with unstable default body')].attrs" [] /// method with unstable default body #[stable(feature = "default_body_method_feature", since = "1.1.0")] #[rustc_default_body_unstable(feature = "method_default_body_feature", issue = "none")] fn method_with_unstable_default() {} - //@ is "$.index[?(@.docs=='required method without default body')].inner.function.has_body" false - //@ is "$.index[?(@.docs=='required method without default body')].inner.function.default_unstable" null + //@ is "$.index[?(@.docs[0].text=='required method without default body')].inner.function.has_body" false + //@ is "$.index[?(@.docs[0].text=='required method without default body')].inner.function.default_unstable" null /// required method without default body #[stable(feature = "required_method_feature", since = "1.2.0")] fn required_method(); - //@ is "$.index[?(@.docs=='method with stable default body')].inner.function.has_body" true - //@ is "$.index[?(@.docs=='method with stable default body')].inner.function.default_unstable" null + //@ is "$.index[?(@.docs[0].text=='method with stable default body')].inner.function.has_body" true + //@ is "$.index[?(@.docs[0].text=='method with stable default body')].inner.function.default_unstable" null /// method with stable default body #[stable(feature = "stable_default_method_feature", since = "1.3.0")] fn method_with_stable_default() {} - //@ is "$.index[?(@.docs=='associated constant with unstable default value')].inner.assoc_const.value" '"0"' - //@ is "$.index[?(@.docs=='associated constant with unstable default value')].inner.assoc_const.default_unstable.feature" '"assoc_const_default_value_feature"' - //@ is "$.index[?(@.docs=='associated constant with unstable default value')].attrs" [] + //@ is "$.index[?(@.docs[0].text=='associated constant with unstable default value')].inner.assoc_const.value" '"0"' + //@ is "$.index[?(@.docs[0].text=='associated constant with unstable default value')].inner.assoc_const.default_unstable.feature" '"assoc_const_default_value_feature"' + //@ is "$.index[?(@.docs[0].text=='associated constant with unstable default value')].attrs" [] /// associated constant with unstable default value #[stable(feature = "assoc_const_with_unstable_default_feature", since = "1.4.0")] #[rustc_default_body_unstable(feature = "assoc_const_default_value_feature", issue = "none")] const UNSTABLE_DEFAULT_CONST: usize = 0; - //@ is "$.index[?(@.docs=='required associated constant')].inner.assoc_const.value" null - //@ is "$.index[?(@.docs=='required associated constant')].inner.assoc_const.default_unstable" null + //@ is "$.index[?(@.docs[0].text=='required associated constant')].inner.assoc_const.value" null + //@ is "$.index[?(@.docs[0].text=='required associated constant')].inner.assoc_const.default_unstable" null /// required associated constant #[stable(feature = "required_assoc_const_feature", since = "1.5.0")] const REQUIRED_CONST: usize; - //@ is "$.index[?(@.docs=='associated type with unstable default type')].inner.assoc_type.default_unstable.feature" '"assoc_type_default_type_feature"' - //@ is "$.index[?(@.docs=='associated type with unstable default type')].attrs" [] + //@ is "$.index[?(@.docs[0].text=='associated type with unstable default type')].inner.assoc_type.default_unstable.feature" '"assoc_type_default_type_feature"' + //@ is "$.index[?(@.docs[0].text=='associated type with unstable default type')].attrs" [] /// associated type with unstable default type #[stable(feature = "assoc_type_with_unstable_default_feature", since = "1.6.0")] #[rustc_default_body_unstable(feature = "assoc_type_default_type_feature", issue = "none")] type UnstableDefaultType = usize; - //@ is "$.index[?(@.docs=='required associated type')].inner.assoc_type.type" null - //@ is "$.index[?(@.docs=='required associated type')].inner.assoc_type.default_unstable" null + //@ is "$.index[?(@.docs[0].text=='required associated type')].inner.assoc_type.type" null + //@ is "$.index[?(@.docs[0].text=='required associated type')].inner.assoc_type.default_unstable" null /// required associated type #[stable(feature = "required_assoc_type_feature", since = "1.7.0")] type RequiredType; @@ -56,19 +56,19 @@ pub struct ImplTarget; // Impl items provide their own definitions, so they do not use the trait's unstable defaults. #[stable(feature = "default_body_impl_feature", since = "2.1.0")] impl TraitWithDefaults for ImplTarget { - //@ is "$.index[?(@.docs=='impl override for unstable default body')].inner.function.default_unstable" null + //@ is "$.index[?(@.docs[0].text=='impl override for unstable default body')].inner.function.default_unstable" null /// impl override for unstable default body fn method_with_unstable_default() {} fn required_method() {} - //@ is "$.index[?(@.docs=='impl override for unstable default value')].inner.assoc_const.default_unstable" null + //@ is "$.index[?(@.docs[0].text=='impl override for unstable default value')].inner.assoc_const.default_unstable" null /// impl override for unstable default value const UNSTABLE_DEFAULT_CONST: usize = 1; const REQUIRED_CONST: usize = 2; - //@ is "$.index[?(@.docs=='impl override for unstable default type')].inner.assoc_type.default_unstable" null + //@ is "$.index[?(@.docs[0].text=='impl override for unstable default type')].inner.assoc_type.default_unstable" null /// impl override for unstable default type type UnstableDefaultType = u8; diff --git a/tests/rustdoc-json/attrs/stability/impls.rs b/tests/rustdoc-json/attrs/stability/impls.rs index e3ac2d58a3e27..222f38e0c2094 100644 --- a/tests/rustdoc-json/attrs/stability/impls.rs +++ b/tests/rustdoc-json/attrs/stability/impls.rs @@ -33,8 +33,8 @@ pub trait UnstableTraitForImpl { fn unstable_trait_method(&self); } -//@ is "$.index[?(@.docs=='stable inherent impl')].stability.feature" '"stable_inherent_impl"' -//@ is "$.index[?(@.docs=='stable inherent impl')].stability.level.stable.since" '"2.0.0"' +//@ is "$.index[?(@.docs[0].text=='stable inherent impl')].stability.feature" '"stable_inherent_impl"' +//@ is "$.index[?(@.docs[0].text=='stable inherent impl')].stability.level.stable.since" '"2.0.0"' /// stable inherent impl #[stable(feature = "stable_inherent_impl", since = "2.0.0")] impl StableImplTarget { @@ -50,8 +50,8 @@ impl StableImplTarget { pub const UNSTABLE_ASSOC_CONST_IN_IMPL: usize = 2; } -//@ is "$.index[?(@.docs=='unstable inherent impl')].stability.level" '"unstable"' -//@ is "$.index[?(@.docs=='unstable inherent impl')].stability.feature" '"unstable_inherent_impl"' +//@ is "$.index[?(@.docs[0].text=='unstable inherent impl')].stability.level" '"unstable"' +//@ is "$.index[?(@.docs[0].text=='unstable inherent impl')].stability.feature" '"unstable_inherent_impl"' /// unstable inherent impl #[unstable(feature = "unstable_inherent_impl", issue = "none")] impl StableImplTarget { @@ -69,57 +69,57 @@ impl StableImplTarget { // stability onto the implemented item. The unstable impl case is different: rustc records the // impl block's instability on contained impl items, so JSON exposes that inherited instability. -//@ is "$.index[?(@.docs=='stable trait impl with unstable trait method')].stability.feature" '"stable_trait_impl_with_unstable_trait_method"' -//@ is "$.index[?(@.docs=='stable trait impl with unstable trait method')].stability.level.stable.since" '"3.0.0"' +//@ is "$.index[?(@.docs[0].text=='stable trait impl with unstable trait method')].stability.feature" '"stable_trait_impl_with_unstable_trait_method"' +//@ is "$.index[?(@.docs[0].text=='stable trait impl with unstable trait method')].stability.level.stable.since" '"3.0.0"' /// stable trait impl with unstable trait method #[stable(feature = "stable_trait_impl_with_unstable_trait_method", since = "3.0.0")] impl StableTraitWithUnstableMethodForImpl for StableImplTarget { // The impl item has no separate stability record; the trait method is unstable. - //@ is "$.index[?(@.docs=='method for unstable trait item inside stable trait impl')].stability" null + //@ is "$.index[?(@.docs[0].text=='method for unstable trait item inside stable trait impl')].stability" null /// method for unstable trait item inside stable trait impl fn unstable_trait_method_for_stable_impl(&self) {} } -//@ is "$.index[?(@.docs=='stable trait impl')].stability.feature" '"stable_trait_impl"' -//@ is "$.index[?(@.docs=='stable trait impl')].stability.level.stable.since" '"3.0.0"' +//@ is "$.index[?(@.docs[0].text=='stable trait impl')].stability.feature" '"stable_trait_impl"' +//@ is "$.index[?(@.docs[0].text=='stable trait impl')].stability.level.stable.since" '"3.0.0"' /// stable trait impl #[stable(feature = "stable_trait_impl", since = "3.0.0")] impl StableTraitForImpl for StableImplTarget { // These impl items likewise have no separate stability records. // Their trait item declarations and the impl block are all stable. - //@ is "$.index[?(@.docs=='assoc type inside stable trait impl')].stability" null + //@ is "$.index[?(@.docs[0].text=='assoc type inside stable trait impl')].stability" null /// assoc type inside stable trait impl type StableOutput = usize; - //@ is "$.index[?(@.docs=='assoc const inside stable trait impl')].stability" null + //@ is "$.index[?(@.docs[0].text=='assoc const inside stable trait impl')].stability" null /// assoc const inside stable trait impl const STABLE_ASSOC_CONST: usize = 0; - //@ is "$.index[?(@.docs=='method inside stable trait impl')].stability" null + //@ is "$.index[?(@.docs[0].text=='method inside stable trait impl')].stability" null /// method inside stable trait impl fn stable_trait_method(&self) {} } -//@ is "$.index[?(@.docs=='unstable trait impl')].stability.level" '"unstable"' -//@ is "$.index[?(@.docs=='unstable trait impl')].stability.feature" '"unstable_trait_impl"' +//@ is "$.index[?(@.docs[0].text=='unstable trait impl')].stability.level" '"unstable"' +//@ is "$.index[?(@.docs[0].text=='unstable trait impl')].stability.feature" '"unstable_trait_impl"' /// unstable trait impl #[unstable(feature = "unstable_trait_impl", issue = "none")] impl UnstableTraitForImpl for StableImplTarget { // These associated items inherit the impl block's instability in rustdoc JSON. - //@ is "$.index[?(@.docs=='assoc type inside unstable trait impl')].stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='assoc type inside unstable trait impl')].stability.feature" '"unstable_trait_impl"' + //@ is "$.index[?(@.docs[0].text=='assoc type inside unstable trait impl')].stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='assoc type inside unstable trait impl')].stability.feature" '"unstable_trait_impl"' /// assoc type inside unstable trait impl type UnstableOutput = usize; - //@ is "$.index[?(@.docs=='assoc const inside unstable trait impl')].stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='assoc const inside unstable trait impl')].stability.feature" '"unstable_trait_impl"' + //@ is "$.index[?(@.docs[0].text=='assoc const inside unstable trait impl')].stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='assoc const inside unstable trait impl')].stability.feature" '"unstable_trait_impl"' /// assoc const inside unstable trait impl const UNSTABLE_ASSOC_CONST: usize = 0; - //@ is "$.index[?(@.docs=='method inside unstable trait impl')].stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='method inside unstable trait impl')].stability.feature" '"unstable_trait_impl"' + //@ is "$.index[?(@.docs[0].text=='method inside unstable trait impl')].stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='method inside unstable trait impl')].stability.feature" '"unstable_trait_impl"' /// method inside unstable trait impl fn unstable_trait_method(&self) {} } diff --git a/tests/rustdoc-json/attrs/stability/members.rs b/tests/rustdoc-json/attrs/stability/members.rs index 6098df5af2f3b..24ebf8ebdbcab 100644 --- a/tests/rustdoc-json/attrs/stability/members.rs +++ b/tests/rustdoc-json/attrs/stability/members.rs @@ -38,9 +38,9 @@ pub union StableUnionWithUnstableField { #[stable(feature = "stable_tuple_struct_feature", since = "3.0.0")] pub struct StableTupleStructWithUnstableField( pub usize, - //@ is "$.index[?(@.docs=='unstable tuple struct field')].stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='unstable tuple struct field')].stability.feature" '"unstable_tuple_struct_field_feature"' - //@ !has "$.index[?(@.docs=='unstable tuple struct field')].stability.since" + //@ is "$.index[?(@.docs[0].text=='unstable tuple struct field')].stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='unstable tuple struct field')].stability.feature" '"unstable_tuple_struct_field_feature"' + //@ !has "$.index[?(@.docs[0].text=='unstable tuple struct field')].stability.since" /// unstable tuple struct field #[unstable(feature = "unstable_tuple_struct_field_feature", issue = "none")] pub usize, @@ -51,9 +51,9 @@ pub enum StableEnumWithFieldVariants { #[stable(feature = "stable_tuple_variant_feature", since = "4.1.0")] TupleVariant( usize, - //@ is "$.index[?(@.docs=='unstable tuple variant field')].stability.level" '"unstable"' - //@ is "$.index[?(@.docs=='unstable tuple variant field')].stability.feature" '"unstable_tuple_variant_field_feature"' - //@ !has "$.index[?(@.docs=='unstable tuple variant field')].stability.since" + //@ is "$.index[?(@.docs[0].text=='unstable tuple variant field')].stability.level" '"unstable"' + //@ is "$.index[?(@.docs[0].text=='unstable tuple variant field')].stability.feature" '"unstable_tuple_variant_field_feature"' + //@ !has "$.index[?(@.docs[0].text=='unstable tuple variant field')].stability.since" /// unstable tuple variant field #[unstable(feature = "unstable_tuple_variant_field_feature", issue = "none")] usize, diff --git a/tests/rustdoc-json/enums/doc_link_to_foreign_variant.rs b/tests/rustdoc-json/enums/doc_link_to_foreign_variant.rs index 42f5acd0c2521..51866d07b6132 100644 --- a/tests/rustdoc-json/enums/doc_link_to_foreign_variant.rs +++ b/tests/rustdoc-json/enums/doc_link_to_foreign_variant.rs @@ -5,5 +5,5 @@ extern crate color; use color::Color::Red; -//@ jq_is '.index["\(.root)"].links | has("Red")' true +//@ jq_is '.index["\(.root)"].docs.[] | .links | has("Red")' true //@ jq_count '[.index[] | select(.name == "Red" or .name == "Color")][]' 0 diff --git a/tests/rustdoc-json/enums/tuple_fields_hidden.rs b/tests/rustdoc-json/enums/tuple_fields_hidden.rs index aa25625b94cfa..e2ef5e060ba14 100644 --- a/tests/rustdoc-json/enums/tuple_fields_hidden.rs +++ b/tests/rustdoc-json/enums/tuple_fields_hidden.rs @@ -1,14 +1,14 @@ -//@ set 1.1.0 = "$.index[?(@.docs=='1.1.0')].id" -//@ set 2.1.0 = "$.index[?(@.docs=='2.1.0')].id" -//@ set 2.1.1 = "$.index[?(@.docs=='2.1.1')].id" -//@ set 2.2.1 = "$.index[?(@.docs=='2.2.1')].id" -//@ set 2.3.0 = "$.index[?(@.docs=='2.3.0')].id" -//@ set 3.1.1 = "$.index[?(@.docs=='3.1.1')].id" -//@ set 3.1.2 = "$.index[?(@.docs=='3.1.2')].id" -//@ set 3.2.0 = "$.index[?(@.docs=='3.2.0')].id" -//@ set 3.2.2 = "$.index[?(@.docs=='3.2.2')].id" -//@ set 3.3.0 = "$.index[?(@.docs=='3.3.0')].id" -//@ set 3.3.1 = "$.index[?(@.docs=='3.3.1')].id" +//@ set 1.1.0 = "$.index[?(@.docs[0].text=='1.1.0')].id" +//@ set 2.1.0 = "$.index[?(@.docs[0].text=='2.1.0')].id" +//@ set 2.1.1 = "$.index[?(@.docs[0].text=='2.1.1')].id" +//@ set 2.2.1 = "$.index[?(@.docs[0].text=='2.2.1')].id" +//@ set 2.3.0 = "$.index[?(@.docs[0].text=='2.3.0')].id" +//@ set 3.1.1 = "$.index[?(@.docs[0].text=='3.1.1')].id" +//@ set 3.1.2 = "$.index[?(@.docs[0].text=='3.1.2')].id" +//@ set 3.2.0 = "$.index[?(@.docs[0].text=='3.2.0')].id" +//@ set 3.2.2 = "$.index[?(@.docs[0].text=='3.2.2')].id" +//@ set 3.3.0 = "$.index[?(@.docs[0].text=='3.3.0')].id" +//@ set 3.3.1 = "$.index[?(@.docs[0].text=='3.3.1')].id" pub enum EnumWithStrippedTupleVariants { //@ count "$.index[?(@.name=='None')].inner.variant.kind.tuple[*]" 0 @@ -55,26 +55,26 @@ pub enum EnumWithStrippedTupleVariants { Three3(/** 3.3.0*/ bool, /** 3.3.1*/ bool, #[doc(hidden)] bool), } -//@ is "$.index[?(@.docs=='1.1.0')].name" '"0"' -//@ is "$.index[?(@.docs=='2.1.0')].name" '"0"' -//@ is "$.index[?(@.docs=='2.1.1')].name" '"1"' -//@ is "$.index[?(@.docs=='2.2.1')].name" '"1"' -//@ is "$.index[?(@.docs=='2.3.0')].name" '"0"' -//@ is "$.index[?(@.docs=='3.1.1')].name" '"1"' -//@ is "$.index[?(@.docs=='3.1.2')].name" '"2"' -//@ is "$.index[?(@.docs=='3.2.0')].name" '"0"' -//@ is "$.index[?(@.docs=='3.2.2')].name" '"2"' -//@ is "$.index[?(@.docs=='3.3.0')].name" '"0"' -//@ is "$.index[?(@.docs=='3.3.1')].name" '"1"' +//@ is "$.index[?(@.docs[0].text=='1.1.0')].name" '"0"' +//@ is "$.index[?(@.docs[0].text=='2.1.0')].name" '"0"' +//@ is "$.index[?(@.docs[0].text=='2.1.1')].name" '"1"' +//@ is "$.index[?(@.docs[0].text=='2.2.1')].name" '"1"' +//@ is "$.index[?(@.docs[0].text=='2.3.0')].name" '"0"' +//@ is "$.index[?(@.docs[0].text=='3.1.1')].name" '"1"' +//@ is "$.index[?(@.docs[0].text=='3.1.2')].name" '"2"' +//@ is "$.index[?(@.docs[0].text=='3.2.0')].name" '"0"' +//@ is "$.index[?(@.docs[0].text=='3.2.2')].name" '"2"' +//@ is "$.index[?(@.docs[0].text=='3.3.0')].name" '"0"' +//@ is "$.index[?(@.docs[0].text=='3.3.1')].name" '"1"' -//@ is "$.index[?(@.docs=='1.1.0')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='2.1.0')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='2.1.1')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='2.2.1')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='2.3.0')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='3.1.1')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='3.1.2')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='3.2.0')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='3.2.2')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='3.3.0')].inner.struct_field" '{"primitive": "bool"}' -//@ is "$.index[?(@.docs=='3.3.1')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='1.1.0')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='2.1.0')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='2.1.1')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='2.2.1')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='2.3.0')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='3.1.1')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='3.1.2')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='3.2.0')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='3.2.2')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='3.3.0')].inner.struct_field" '{"primitive": "bool"}' +//@ is "$.index[?(@.docs[0].text=='3.3.1')].inner.struct_field" '{"primitive": "bool"}' diff --git a/tests/rustdoc-json/impl-trait-in-assoc-type.rs b/tests/rustdoc-json/impl-trait-in-assoc-type.rs index 742a46e896746..ccf4f33020beb 100644 --- a/tests/rustdoc-json/impl-trait-in-assoc-type.rs +++ b/tests/rustdoc-json/impl-trait-in-assoc-type.rs @@ -4,25 +4,25 @@ pub struct AlwaysTrue; /// impl IntoIterator impl IntoIterator for AlwaysTrue { - //@ set Item = '$.index[?(@.docs=="type Item")].id' + //@ set Item = '$.index[?(@.docs[0].text=="type Item")].id' /// type Item type Item = bool; - //@ count '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[*]' 1 - //@ is '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.path' '"Iterator"' - //@ count '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[*]' 1 - //@ is '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].name' '"Item"' - //@ is '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].binding.equality.type.primitive' '"bool"' + //@ count '$.index[?(@.docs[0].text=="type IntoIter")].inner.assoc_type.type.impl_trait[*]' 1 + //@ is '$.index[?(@.docs[0].text=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.path' '"Iterator"' + //@ count '$.index[?(@.docs[0].text=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[*]' 1 + //@ is '$.index[?(@.docs[0].text=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].name' '"Item"' + //@ is '$.index[?(@.docs[0].text=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].binding.equality.type.primitive' '"bool"' - //@ set IntoIter = '$.index[?(@.docs=="type IntoIter")].id' + //@ set IntoIter = '$.index[?(@.docs[0].text=="type IntoIter")].id' /// type IntoIter type IntoIter = impl Iterator; - //@ set into_iter = '$.index[?(@.docs=="fn into_iter")].id' + //@ set into_iter = '$.index[?(@.docs[0].text=="fn into_iter")].id' /// fn into_iter fn into_iter(self) -> Self::IntoIter { std::iter::repeat(true) } } -//@ ismany '$.index[?(@.docs=="impl IntoIterator")].inner.impl.items[*]' $Item $IntoIter $into_iter +//@ ismany '$.index[?(@.docs[0].text=="impl IntoIterator")].inner.impl.items[*]' $Item $IntoIter $into_iter diff --git a/tests/rustdoc-json/impls/auto.rs b/tests/rustdoc-json/impls/auto.rs index 104c4891502d4..a542e41731975 100644 --- a/tests/rustdoc-json/impls/auto.rs +++ b/tests/rustdoc-json/impls/auto.rs @@ -21,9 +21,9 @@ impl Foo { } // Testing spans, so all tests below code -//@ is "$.index[?(@.docs=='has span')].span.begin" "[19, 1]" -//@ is "$.index[?(@.docs=='has span')].span.end" "[21, 2]" -//@ is "$.index[?(@.docs=='has span')].inner.impl.is_synthetic" false +//@ is "$.index[?(@.docs[0].text=='has span')].span.begin" "[19, 1]" +//@ is "$.index[?(@.docs[0].text=='has span')].span.end" "[21, 2]" +//@ is "$.index[?(@.docs[0].text=='has span')].inner.impl.is_synthetic" false //@ is "$.index[?(@.inner.impl.is_synthetic==true)].span" null //@ is "$.index[?(@.inner.impl.is_synthetic==true)].inner.impl.for.resolved_path.path" '"Foo"' //@ is "$.index[?(@.inner.impl.is_synthetic==true)].inner.impl.trait.path" '"Bar"' diff --git a/tests/rustdoc-json/impls/foreign_for_local.rs b/tests/rustdoc-json/impls/foreign_for_local.rs index e46b158d80205..c4b3b45869a17 100644 --- a/tests/rustdoc-json/impls/foreign_for_local.rs +++ b/tests/rustdoc-json/impls/foreign_for_local.rs @@ -3,7 +3,7 @@ extern crate foreign_trait; /// ForeignTrait id hack pub use foreign_trait::ForeignTrait as _; -//@ set ForeignTrait = "$.index[?(@.docs=='ForeignTrait id hack')].inner.use.id" +//@ set ForeignTrait = "$.index[?(@.docs[0].text=='ForeignTrait id hack')].inner.use.id" pub struct LocalStruct; //@ set LocalStruct = "$.index[?(@.name=='LocalStruct')].id" @@ -11,8 +11,8 @@ pub struct LocalStruct; /// foreign for local impl foreign_trait::ForeignTrait for LocalStruct {} -//@ set impl = "$.index[?(@.docs=='foreign for local')].id" -//@ is "$.index[?(@.docs=='foreign for local')].inner.impl.for.resolved_path.id" $LocalStruct -//@ is "$.index[?(@.docs=='foreign for local')].inner.impl.trait.id" $ForeignTrait +//@ set impl = "$.index[?(@.docs[0].text=='foreign for local')].id" +//@ is "$.index[?(@.docs[0].text=='foreign for local')].inner.impl.for.resolved_path.id" $LocalStruct +//@ is "$.index[?(@.docs[0].text=='foreign for local')].inner.impl.trait.id" $ForeignTrait //@ has "$.index[?(@.name=='LocalStruct')].inner.struct.impls[*]" $impl diff --git a/tests/rustdoc-json/impls/fundamental_nesting.rs b/tests/rustdoc-json/impls/fundamental_nesting.rs index a6aefb94f961f..c7a72824c71f2 100644 --- a/tests/rustdoc-json/impls/fundamental_nesting.rs +++ b/tests/rustdoc-json/impls/fundamental_nesting.rs @@ -13,7 +13,7 @@ impl From> for String { String::new() } } -//@ set from_box_local = "$.index[?(@.docs=='from box local')].id" +//@ set from_box_local = "$.index[?(@.docs[0].text=='from box local')].id" //@ has "$.index[?(@.name=='Local')].inner.struct.impls[*]" $from_box_local // Reference to a fundamental wrapper. @@ -23,7 +23,7 @@ impl<'a> From<&'a Box> for u16 { 0 } } -//@ set from_ref_box_local = "$.index[?(@.docs=='from ref box local')].id" +//@ set from_ref_box_local = "$.index[?(@.docs[0].text=='from ref box local')].id" //@ has "$.index[?(@.name=='Local')].inner.struct.impls[*]" $from_ref_box_local // Nested two levels deep in Self. @@ -33,7 +33,7 @@ impl From for Box> { Box::new(Box::new(Local)) } } -//@ set u32_for_box_box_local = "$.index[?(@.docs=='u32 for box box local')].id" +//@ set u32_for_box_box_local = "$.index[?(@.docs[0].text=='u32 for box box local')].id" //@ has "$.index[?(@.name=='Local')].inner.struct.impls[*]" $u32_for_box_box_local // Mixed fundamental wrappers in Self. @@ -43,7 +43,7 @@ impl From for Pin> { Pin::new(Box::new(Local)) } } -//@ set u64_for_pin_box_local = "$.index[?(@.docs=='u64 for pin box local')].id" +//@ set u64_for_pin_box_local = "$.index[?(@.docs[0].text=='u64 for pin box local')].id" //@ has "$.index[?(@.name=='Local')].inner.struct.impls[*]" $u64_for_pin_box_local // A non-fundamental wrapper must not associate the impl with Local, but the impl must still be @@ -52,6 +52,6 @@ pub trait Marker {} /// marker for vec local impl Marker for Vec {} -//@ set marker_for_vec_local = "$.index[?(@.docs=='marker for vec local')].id" +//@ set marker_for_vec_local = "$.index[?(@.docs[0].text=='marker for vec local')].id" //@ !has "$.index[?(@.name=='Local')].inner.struct.impls[*]" $marker_for_vec_local //@ has "$.index[?(@.name=='Marker')].inner.trait.implementations[*]" $marker_for_vec_local diff --git a/tests/rustdoc-json/impls/impl_item_visibility.rs b/tests/rustdoc-json/impls/impl_item_visibility.rs index 680ea175d0bb2..e694549b2a4f6 100644 --- a/tests/rustdoc-json/impls/impl_item_visibility.rs +++ b/tests/rustdoc-json/impls/impl_item_visibility.rs @@ -4,13 +4,13 @@ pub struct Foo; impl Foo { fn baz() {} } -//@ !has '$.index[?(@.docs=="impl Foo priv")]' +//@ !has '$.index[?(@.docs[0].text=="impl Foo priv")]' /// impl Foo pub impl Foo { pub fn qux() {} } -//@ is '$.index[?(@.docs=="impl Foo pub")].visibility' '"default"' +//@ is '$.index[?(@.docs[0].text=="impl Foo pub")].visibility' '"default"' /// impl Foo hidden impl Foo { @@ -18,4 +18,4 @@ impl Foo { pub fn __quazl() {} } // FIXME(#111564): Is this the right behaviour? -//@ is '$.index[?(@.docs=="impl Foo hidden")].visibility' '"default"' +//@ is '$.index[?(@.docs[0].text=="impl Foo hidden")].visibility' '"default"' diff --git a/tests/rustdoc-json/impls/impl_item_visibility_show_hidden.rs b/tests/rustdoc-json/impls/impl_item_visibility_show_hidden.rs index 82d59b97b013d..a342d7e4ad291 100644 --- a/tests/rustdoc-json/impls/impl_item_visibility_show_hidden.rs +++ b/tests/rustdoc-json/impls/impl_item_visibility_show_hidden.rs @@ -7,13 +7,13 @@ impl Foo { fn baz() {} } // FIXME(#111564): Is this the right behaviour? -//@ is '$.index[?(@.docs=="impl Foo priv")].visibility' '"default"' +//@ is '$.index[?(@.docs[0].text=="impl Foo priv")].visibility' '"default"' /// impl Foo pub impl Foo { pub fn qux() {} } -//@ is '$.index[?(@.docs=="impl Foo pub")].visibility' '"default"' +//@ is '$.index[?(@.docs[0].text=="impl Foo pub")].visibility' '"default"' /// impl Foo hidden impl Foo { @@ -21,4 +21,4 @@ impl Foo { pub fn __quazl() {} } // FIXME(#111564): Is this the right behaviour? -//@ is '$.index[?(@.docs=="impl Foo hidden")].visibility' '"default"' +//@ is '$.index[?(@.docs[0].text=="impl Foo hidden")].visibility' '"default"' diff --git a/tests/rustdoc-json/impls/impl_item_visibility_show_private.rs b/tests/rustdoc-json/impls/impl_item_visibility_show_private.rs index a3b145adb869a..74d9ae9912962 100644 --- a/tests/rustdoc-json/impls/impl_item_visibility_show_private.rs +++ b/tests/rustdoc-json/impls/impl_item_visibility_show_private.rs @@ -6,13 +6,13 @@ pub struct Foo; impl Foo { fn baz() {} } -//@ is '$.index[?(@.docs=="impl Foo priv")].visibility' '"default"' +//@ is '$.index[?(@.docs[0].text=="impl Foo priv")].visibility' '"default"' /// impl Foo pub impl Foo { pub fn qux() {} } -//@ is '$.index[?(@.docs=="impl Foo pub")].visibility' '"default"' +//@ is '$.index[?(@.docs[0].text=="impl Foo pub")].visibility' '"default"' /// impl Foo hidden impl Foo { @@ -20,4 +20,4 @@ impl Foo { pub fn __quazl() {} } // FIXME(#111564): Is this the right behaviour? -//@ is '$.index[?(@.docs=="impl Foo hidden")].visibility' '"default"' +//@ is '$.index[?(@.docs[0].text=="impl Foo hidden")].visibility' '"default"' diff --git a/tests/rustdoc-json/impls/import_from_private.rs b/tests/rustdoc-json/impls/import_from_private.rs index 02262d9b65fac..73bc924a7d24f 100644 --- a/tests/rustdoc-json/impls/import_from_private.rs +++ b/tests/rustdoc-json/impls/import_from_private.rs @@ -3,7 +3,7 @@ mod bar { //@ set baz = "$.index[?(@.name == 'Baz')].id" pub struct Baz; - //@ set impl = "$.index[?(@.docs == 'impl')].id" + //@ set impl = "$.index[?(@.docs[0].text == 'impl')].id" /// impl impl Baz { //@ set doit = "$.index[?(@.name == 'doit')].id" @@ -17,4 +17,4 @@ pub use bar::Baz; //@ is "$.index[*].inner.module.items[*]" $import //@ is "$.index[*].inner.use.id" $baz //@ has "$.index[?(@.name == 'Baz')].inner.struct.impls[*]" $impl -//@ is "$.index[?(@.docs=='impl')].inner.impl.items[*]" $doit +//@ is "$.index[?(@.docs[0].text=='impl')].inner.impl.items[*]" $doit diff --git a/tests/rustdoc-json/impls/issue-112852-dangling-trait-impl-id-2.rs b/tests/rustdoc-json/impls/issue-112852-dangling-trait-impl-id-2.rs index 54ec08135be7f..292b820d8e952 100644 --- a/tests/rustdoc-json/impls/issue-112852-dangling-trait-impl-id-2.rs +++ b/tests/rustdoc-json/impls/issue-112852-dangling-trait-impl-id-2.rs @@ -1,5 +1,5 @@ -//@ has "$.index[?(@.docs=='Here')]" -//@ !has "$.index[?(@.docs=='Not Here')]" +//@ has "$.index[?(@.docs[0].text=='Here')]" +//@ !has "$.index[?(@.docs[0].text=='Not Here')]" //@ !has "$.index[?(@.name == 'HiddenPubStruct')]" //@ has "$.index[?(@.name == 'NotHiddenPubStruct')]" //@ has "$.index[?(@.name=='PubTrait')]" diff --git a/tests/rustdoc-json/impls/issue-112852-dangling-trait-impl-id.rs b/tests/rustdoc-json/impls/issue-112852-dangling-trait-impl-id.rs index 7fc3f70fe5a65..aab45571941e8 100644 --- a/tests/rustdoc-json/impls/issue-112852-dangling-trait-impl-id.rs +++ b/tests/rustdoc-json/impls/issue-112852-dangling-trait-impl-id.rs @@ -6,7 +6,7 @@ pub mod hidden { //@ !has "$.index[?(@.name == 'HiddenPubStruct')]" pub struct HiddenPubStruct; - //@ !has "$.index[?(@.docs == 'Not Here')]" + //@ !has "$.index[?(@.docs[0].text == 'Not Here')]" /// Not Here impl crate::PubTrait for HiddenPubStruct {} } @@ -15,7 +15,7 @@ pub mod not_hidden { //@ has "$.index[?(@.name == 'NotHiddenPubStruct')]" pub struct NotHiddenPubStruct; - //@ has "$.index[?(@.docs == 'Here')]" + //@ has "$.index[?(@.docs[0].text == 'Here')]" /// Here impl crate::PubTrait for NotHiddenPubStruct {} } diff --git a/tests/rustdoc-json/impls/local_for_foreign.rs b/tests/rustdoc-json/impls/local_for_foreign.rs index 86c72a580b2e3..2d248b4913621 100644 --- a/tests/rustdoc-json/impls/local_for_foreign.rs +++ b/tests/rustdoc-json/impls/local_for_foreign.rs @@ -3,7 +3,7 @@ extern crate foreign_struct; /// ForeignStruct id hack pub use foreign_struct::ForeignStruct as _; -//@ set ForeignStruct = "$.index[?(@.docs=='ForeignStruct id hack')].inner.use.id" +//@ set ForeignStruct = "$.index[?(@.docs[0].text=='ForeignStruct id hack')].inner.use.id" pub trait LocalTrait {} //@ set LocalTrait = "$.index[?(@.name=='LocalTrait')].id" @@ -11,8 +11,8 @@ pub trait LocalTrait {} /// local for foreign impl LocalTrait for foreign_struct::ForeignStruct {} -//@ set impl = "$.index[?(@.docs=='local for foreign')].id" -//@ is "$.index[?(@.docs=='local for foreign')].inner.impl.trait.id" $LocalTrait -//@ is "$.index[?(@.docs=='local for foreign')].inner.impl.for.resolved_path.id" $ForeignStruct +//@ set impl = "$.index[?(@.docs[0].text=='local for foreign')].id" +//@ is "$.index[?(@.docs[0].text=='local for foreign')].inner.impl.trait.id" $LocalTrait +//@ is "$.index[?(@.docs[0].text=='local for foreign')].inner.impl.for.resolved_path.id" $ForeignStruct //@ is "$.index[?(@.name=='LocalTrait')].inner.trait.implementations[*]" $impl diff --git a/tests/rustdoc-json/impls/local_for_local.rs b/tests/rustdoc-json/impls/local_for_local.rs index 876a7912f09b0..0394673c2724a 100644 --- a/tests/rustdoc-json/impls/local_for_local.rs +++ b/tests/rustdoc-json/impls/local_for_local.rs @@ -2,11 +2,11 @@ pub struct Struct; //@ set trait = "$.index[?(@.name=='Trait')].id" pub trait Trait {} -//@ set impl = "$.index[?(@.docs=='impl')].id" +//@ set impl = "$.index[?(@.docs[0].text=='impl')].id" /// impl impl Trait for Struct {} //@ has "$.index[?(@.name=='Struct')].inner.struct.impls[*]" $impl //@ is "$.index[?(@.name=='Trait')].inner.trait.implementations[*]" $impl -//@ is "$.index[?(@.docs=='impl')].inner.impl.trait.id" $trait -//@ is "$.index[?(@.docs=='impl')].inner.impl.for.resolved_path.id" $struct +//@ is "$.index[?(@.docs[0].text=='impl')].inner.impl.trait.id" $trait +//@ is "$.index[?(@.docs[0].text=='impl')].inner.impl.for.resolved_path.id" $struct diff --git a/tests/rustdoc-json/impls/local_for_local_primitive.rs b/tests/rustdoc-json/impls/local_for_local_primitive.rs index 97ada2cf131bc..a3bd4a05e0e20 100644 --- a/tests/rustdoc-json/impls/local_for_local_primitive.rs +++ b/tests/rustdoc-json/impls/local_for_local_primitive.rs @@ -3,12 +3,12 @@ //@ set Local = "$.index[?(@.name=='Local')].id" pub trait Local {} -//@ is "$.index[?(@.docs=='Local for bool')].inner.impl.trait.id" $Local -//@ is "$.index[?(@.docs=='Local for bool')].inner.impl.for.primitive" '"bool"' +//@ is "$.index[?(@.docs[0].text=='Local for bool')].inner.impl.trait.id" $Local +//@ is "$.index[?(@.docs[0].text=='Local for bool')].inner.impl.for.primitive" '"bool"' /// Local for bool impl Local for bool {} -//@ set impl = "$.index[?(@.docs=='Local for bool')].id" +//@ set impl = "$.index[?(@.docs[0].text=='Local for bool')].id" //@ is "$.index[?(@.name=='Local')].inner.trait.implementations[*]" $impl // FIXME(#101695): Test bool's `impls` include "Local for bool" diff --git a/tests/rustdoc-json/impls/local_for_primitive.rs b/tests/rustdoc-json/impls/local_for_primitive.rs index a5ab3ec8a1b79..920f72cbb6f39 100644 --- a/tests/rustdoc-json/impls/local_for_primitive.rs +++ b/tests/rustdoc-json/impls/local_for_primitive.rs @@ -1,7 +1,7 @@ //@ set local = "$.index[?(@.name=='Local')]" pub trait Local {} -//@ set impl = "$.index[?(@.docs=='local for bool')].id" +//@ set impl = "$.index[?(@.docs[0].text=='local for bool')].id" //@ is "$.index[?(@.name=='Local')].inner.trait.implementations[*]" $impl /// local for bool impl Local for bool {} diff --git a/tests/rustdoc-json/impls/pub_for_hidden_private.rs b/tests/rustdoc-json/impls/pub_for_hidden_private.rs index eb89219022c77..56eefe346ad2f 100644 --- a/tests/rustdoc-json/impls/pub_for_hidden_private.rs +++ b/tests/rustdoc-json/impls/pub_for_hidden_private.rs @@ -5,6 +5,6 @@ pub trait TheTrait {} #[doc(hidden)] struct Value {} -//@ has '$.index[?(@.docs=="THE IMPL")]' +//@ has '$.index[?(@.docs[0].text=="THE IMPL")]' /// THE IMPL impl TheTrait for Value {} diff --git a/tests/rustdoc-json/impls/trait-for-dyn-trait.rs b/tests/rustdoc-json/impls/trait-for-dyn-trait.rs index 17cb07f3571de..3702eefe55185 100644 --- a/tests/rustdoc-json/impls/trait-for-dyn-trait.rs +++ b/tests/rustdoc-json/impls/trait-for-dyn-trait.rs @@ -7,9 +7,9 @@ pub trait T2 {} /// Fun impl impl T1 for dyn T2 {} -//@ set impl = '$.index[?(@.docs=="Fun impl")].id' +//@ set impl = '$.index[?(@.docs[0].text=="Fun impl")].id' //@ is '$.index[?(@.name=="T1")].inner.trait.implementations[*]' $impl //@ is '$.index[?(@.name=="T2")].inner.trait.implementations' [] -//@ is '$.index[?(@.docs=="Fun impl")].inner.impl.trait.id' $t1 -//@ is '$.index[?(@.docs=="Fun impl")].inner.impl.for.dyn_trait.traits[*].trait.id' $t2 +//@ is '$.index[?(@.docs[0].text=="Fun impl")].inner.impl.trait.id' $t1 +//@ is '$.index[?(@.docs[0].text=="Fun impl")].inner.impl.for.dyn_trait.traits[*].trait.id' $t2 diff --git a/tests/rustdoc-json/intra-doc-links/non_page.rs b/tests/rustdoc-json/intra-doc-links/non_page.rs index 19c8011399db2..3d45a7e03648f 100644 --- a/tests/rustdoc-json/intra-doc-links/non_page.rs +++ b/tests/rustdoc-json/intra-doc-links/non_page.rs @@ -17,23 +17,23 @@ //@ set ASSOC_CONST = "$.index[?(@.name=='ASSOC_CONST')].id" //@ set method = "$.index[?(@.name=='method')].id" -//@ is "$.index[?(@.name=='non_page')].links['`Struct::struct_field`']" $struct_field -//@ is "$.index[?(@.name=='non_page')].links['`Enum::Variant`']" $Variant -//@ is "$.index[?(@.name=='non_page')].links['`Trait::AssocType`']" $AssocType -//@ is "$.index[?(@.name=='non_page')].links['`Trait::ASSOC_CONST`']" $ASSOC_CONST -//@ is "$.index[?(@.name=='non_page')].links['`Trait::method`']" $method +//@ is "$.index[?(@.name=='non_page')].docs[*].links['`Struct::struct_field`']" $struct_field +//@ is "$.index[?(@.name=='non_page')].docs[*].links['`Enum::Variant`']" $Variant +//@ is "$.index[?(@.name=='non_page')].docs[*].links['`Trait::AssocType`']" $AssocType +//@ is "$.index[?(@.name=='non_page')].docs[*].links['`Trait::ASSOC_CONST`']" $ASSOC_CONST +//@ is "$.index[?(@.name=='non_page')].docs[*].links['`Trait::method`']" $method // Regression test for : // link target IDs for associated items need matching `paths` entries. //@ jq_set crate = '.index[] | select(.name == "non_page")' -//@ jq_set struct_field_link = '$crate.links["`Struct::struct_field`"]' -//@ jq_set variant_field_link = '$crate.links["`Enum::StructVariant::field`"]' -//@ jq_set assoc_type_link = '$crate.links["`Trait::AssocType`"]' -//@ jq_set assoc_const_link = '$crate.links["`Trait::ASSOC_CONST`"]' -//@ jq_set method_link = '$crate.links["`Trait::method`"]' -//@ jq_set vec_push_link = '$crate.links["`std::vec::Vec::push`"]' -//@ jq_set error_kind_link = '$crate.links["`std::io::ErrorKind::NotFound`"]' -//@ jq_set usize_max_link = '$crate.links["`usize::MAX`"]' +//@ jq_set struct_field_link = '$crate.docs[] | .links["`Struct::struct_field`"]' +//@ jq_set variant_field_link = '$crate.docs[] | .links["`Enum::StructVariant::field`"]' +//@ jq_set assoc_type_link = '$crate.docs[] | .links["`Trait::AssocType`"]' +//@ jq_set assoc_const_link = '$crate.docs[] | .links["`Trait::ASSOC_CONST`"]' +//@ jq_set method_link = '$crate.docs[] | .links["`Trait::method`"]' +//@ jq_set vec_push_link = '$crate.docs[] | .links["`std::vec::Vec::push`"]' +//@ jq_set error_kind_link = '$crate.docs[] | .links["`std::io::ErrorKind::NotFound`"]' +//@ jq_set usize_max_link = '$crate.docs[] | .links["`usize::MAX`"]' //@ jq_is '.paths["\($struct_field_link)"].path' '["non_page", "Struct", "struct_field"]' //@ jq_is '.paths["\($variant_field_link)"].path' '["non_page", "Enum", "StructVariant", "field"]' //@ jq_is '.paths["\($assoc_type_link)"].path' '["non_page", "Trait", "AssocType"]' diff --git a/tests/rustdoc-json/intra-doc-links/user_written.rs b/tests/rustdoc-json/intra-doc-links/user_written.rs index 97a643490e6c4..7631cf200e2e3 100644 --- a/tests/rustdoc-json/intra-doc-links/user_written.rs +++ b/tests/rustdoc-json/intra-doc-links/user_written.rs @@ -5,4 +5,4 @@ pub fn foo() {} //@ set foo = "$.index[?(@.name=='foo')].id" -//@ is "$.index[?(@.name=='user_written')].links['foo#reasons']" $foo +//@ is "$.index[?(@.name=='user_written')].docs[0].links['foo#reasons']" $foo diff --git a/tests/rustdoc-json/primitives/local_primitive.rs b/tests/rustdoc-json/primitives/local_primitive.rs index e635cf12a6fb3..2357e5d8fdec5 100644 --- a/tests/rustdoc-json/primitives/local_primitive.rs +++ b/tests/rustdoc-json/primitives/local_primitive.rs @@ -24,4 +24,4 @@ const _: () = (); //@ set local_i32 = "$.index[?(@.name=='i32')].id" //@ has "$.index[?(@.name=='local_primitive')]" -//@ is "$.index[?(@.name=='local_primitive')].links['prim@i32']" $local_i32 +//@ is "$.index[?(@.name=='local_primitive')].docs[0].links['prim@i32']" $local_i32 diff --git a/tests/rustdoc-json/primitives/primitive_impls.rs b/tests/rustdoc-json/primitives/primitive_impls.rs index bb6f85a507696..3daab914900c9 100644 --- a/tests/rustdoc-json/primitives/primitive_impls.rs +++ b/tests/rustdoc-json/primitives/primitive_impls.rs @@ -4,7 +4,7 @@ #![no_core] #![rustc_coherence_is_core] -//@ set impl_i32 = "$.index[?(@.docs=='Only core can do this')].id" +//@ set impl_i32 = "$.index[?(@.docs[0].text=='Only core can do this')].id" #[lang = "pointee_sized"] pub trait PointeeSized {} @@ -17,19 +17,19 @@ pub trait Sized: MetaSized {} /// Only core can do this impl i32 { - //@ set identity = "$.index[?(@.docs=='Do Nothing')].id" + //@ set identity = "$.index[?(@.docs[0].text=='Do Nothing')].id" /// Do Nothing pub fn identity(self) -> Self { self } - //@ is "$.index[?(@.docs=='Only core can do this')].inner.impl.items[*]" $identity + //@ is "$.index[?(@.docs[0].text=='Only core can do this')].inner.impl.items[*]" $identity } //@ set Trait = "$.index[?(@.name=='Trait')].id" pub trait Trait {} -//@ set impl_trait_for_i32 = "$.index[?(@.docs=='impl Trait for i32')].id" +//@ set impl_trait_for_i32 = "$.index[?(@.docs[0].text=='impl Trait for i32')].id" /// impl Trait for i32 impl Trait for i32 {} @@ -37,7 +37,7 @@ impl Trait for i32 {} #[rustc_doc_primitive = "i32"] const _: () = (); -//@ set i32 = "$.index[?(@.docs=='i32')].id" -//@ is "$.index[?(@.docs=='i32')].name" '"i32"' -//@ is "$.index[?(@.docs=='i32')].inner.primitive.name" '"i32"' -//@ ismany "$.index[?(@.docs=='i32')].inner.primitive.impls[*]" $impl_i32 $impl_trait_for_i32 +//@ set i32 = "$.index[?(@.docs[0].text=='i32')].id" +//@ is "$.index[?(@.docs[0].text=='i32')].name" '"i32"' +//@ is "$.index[?(@.docs[0].text=='i32')].inner.primitive.name" '"i32"' +//@ ismany "$.index[?(@.docs[0].text=='i32')].inner.primitive.impls[*]" $impl_i32 $impl_trait_for_i32 diff --git a/tests/rustdoc-json/reexport/glob_collision.rs b/tests/rustdoc-json/reexport/glob_collision.rs index dd6eab6517b09..224a0b2841957 100644 --- a/tests/rustdoc-json/reexport/glob_collision.rs +++ b/tests/rustdoc-json/reexport/glob_collision.rs @@ -15,12 +15,12 @@ mod m2 { pub fn f(_: u8) {} } -//@ set m1_use = "$.index[?(@.docs=='m1 re-export')].id" +//@ set m1_use = "$.index[?(@.docs[0].text=='m1 re-export')].id" //@ is "$.index[?(@.inner.use.name=='m1')].inner.use.id" $m1 //@ is "$.index[?(@.inner.use.name=='m1')].inner.use.is_glob" true /// m1 re-export pub use m1::*; -//@ set m2_use = "$.index[?(@.docs=='m2 re-export')].id" +//@ set m2_use = "$.index[?(@.docs[0].text=='m2 re-export')].id" //@ is "$.index[?(@.inner.use.name=='m2')].inner.use.id" $m2 //@ is "$.index[?(@.inner.use.name=='m2')].inner.use.is_glob" true /// m2 re-export diff --git a/tests/rustdoc-json/reexport/glob_private.rs b/tests/rustdoc-json/reexport/glob_private.rs index f232914787b22..e6bc00c961850 100644 --- a/tests/rustdoc-json/reexport/glob_private.rs +++ b/tests/rustdoc-json/reexport/glob_private.rs @@ -11,8 +11,8 @@ mod mod1 { struct Mod2Private; } - //@ set mod2_use_id = "$.index[?(@.docs=='Mod2 re-export')].id" - //@ is "$.index[?(@.docs=='Mod2 re-export')].inner.use.name" \"mod2\" + //@ set mod2_use_id = "$.index[?(@.docs[0].text=='Mod2 re-export')].id" + //@ is "$.index[?(@.docs[0].text=='Mod2 re-export')].inner.use.name" \"mod2\" /// Mod2 re-export pub use self::mod2::*; @@ -22,8 +22,8 @@ mod mod1 { struct Mod1Private; } -//@ set mod1_use_id = "$.index[?(@.docs=='Mod1 re-export')].id" -//@ is "$.index[?(@.docs=='Mod1 re-export')].inner.use.name" \"mod1\" +//@ set mod1_use_id = "$.index[?(@.docs[0].text=='Mod1 re-export')].id" +//@ is "$.index[?(@.docs[0].text=='Mod1 re-export')].inner.use.name" \"mod1\" /// Mod1 re-export pub use mod1::*; diff --git a/tests/rustdoc-json/reexport/in_root_and_mod_pub.rs b/tests/rustdoc-json/reexport/in_root_and_mod_pub.rs index 54dda2a3cd099..e0d49cfdc12e8 100644 --- a/tests/rustdoc-json/reexport/in_root_and_mod_pub.rs +++ b/tests/rustdoc-json/reexport/in_root_and_mod_pub.rs @@ -4,14 +4,14 @@ pub mod foo { pub struct Bar; } -//@ set root_import_id = "$.index[?(@.docs=='Outer re-export')].id" +//@ set root_import_id = "$.index[?(@.docs[0].text=='Outer re-export')].id" //@ is "$.index[?(@.inner.use.source=='foo::Bar')].inner.use.id" $bar_id //@ has "$.index[?(@.name=='in_root_and_mod_pub')].inner.module.items[*]" $root_import_id /// Outer re-export pub use foo::Bar; pub mod baz { - //@ set baz_import_id = "$.index[?(@.docs=='Inner re-export')].id" + //@ set baz_import_id = "$.index[?(@.docs[0].text=='Inner re-export')].id" //@ is "$.index[?(@.inner.use.source=='crate::foo::Bar')].inner.use.id" $bar_id //@ ismany "$.index[?(@.name=='baz')].inner.module.items[*]" $baz_import_id /// Inner re-export diff --git a/tests/rustdoc-json/reexport/macro.rs b/tests/rustdoc-json/reexport/macro.rs index 0bd37768255bc..f96f137f0b6c5 100644 --- a/tests/rustdoc-json/reexport/macro.rs +++ b/tests/rustdoc-json/reexport/macro.rs @@ -6,7 +6,7 @@ macro_rules! repro { () => {}; } -//@ set repro2_id = "$.index[?(@.docs=='Re-export')].id" +//@ set repro2_id = "$.index[?(@.docs[0].text=='Re-export')].id" /// Re-export pub use crate::repro as repro2; diff --git a/tests/rustdoc-json/reexport/private_twice_one_inline.rs b/tests/rustdoc-json/reexport/private_twice_one_inline.rs index 6b5d03e207eb4..880cb15908a07 100644 --- a/tests/rustdoc-json/reexport/private_twice_one_inline.rs +++ b/tests/rustdoc-json/reexport/private_twice_one_inline.rs @@ -5,15 +5,15 @@ extern crate pub_struct as foo; #[doc(inline)] -//@ set crate_use_id = "$.index[?(@.docs=='Hack A')].id" -//@ set foo_id = "$.index[?(@.docs=='Hack A')].inner.use.id" +//@ set crate_use_id = "$.index[?(@.docs[0].text=='Hack A')].id" +//@ set foo_id = "$.index[?(@.docs[0].text=='Hack A')].inner.use.id" /// Hack A pub use foo::Foo; //@ set bar_id = "$.index[?(@.name=='bar')].id" pub mod bar { - //@ is "$.index[?(@.docs=='Hack B')].inner.use.id" $foo_id - //@ set bar_use_id = "$.index[?(@.docs=='Hack B')].id" + //@ is "$.index[?(@.docs[0].text=='Hack B')].inner.use.id" $foo_id + //@ set bar_use_id = "$.index[?(@.docs[0].text=='Hack B')].id" //@ ismany "$.index[?(@.name=='bar')].inner.module.items[*]" $bar_use_id /// Hack B pub use foo::Foo; diff --git a/tests/rustdoc-json/reexport/private_two_names.rs b/tests/rustdoc-json/reexport/private_two_names.rs index 79af40b83a4f8..1d3d99cf928fe 100644 --- a/tests/rustdoc-json/reexport/private_two_names.rs +++ b/tests/rustdoc-json/reexport/private_two_names.rs @@ -7,14 +7,14 @@ mod style { pub struct Color; } -//@ is "$.index[?(@.docs=='First re-export')].inner.use.id" $color_struct_id -//@ is "$.index[?(@.docs=='First re-export')].inner.use.name" \"Color\" -//@ set color_export_id = "$.index[?(@.docs=='First re-export')].id" +//@ is "$.index[?(@.docs[0].text=='First re-export')].inner.use.id" $color_struct_id +//@ is "$.index[?(@.docs[0].text=='First re-export')].inner.use.name" \"Color\" +//@ set color_export_id = "$.index[?(@.docs[0].text=='First re-export')].id" /// First re-export pub use style::Color; -//@ is "$.index[?(@.docs=='Second re-export')].inner.use.id" $color_struct_id -//@ is "$.index[?(@.docs=='Second re-export')].inner.use.name" \"Colour\" -//@ set colour_export_id = "$.index[?(@.docs=='Second re-export')].id" +//@ is "$.index[?(@.docs[0].text=='Second re-export')].inner.use.id" $color_struct_id +//@ is "$.index[?(@.docs[0].text=='Second re-export')].inner.use.name" \"Colour\" +//@ set colour_export_id = "$.index[?(@.docs[0].text=='Second re-export')].id" /// Second re-export pub use style::Color as Colour; diff --git a/tests/rustdoc-json/reexport/reexport_method_from_private_module.rs b/tests/rustdoc-json/reexport/reexport_method_from_private_module.rs index 56922340a6fbe..8e4cda1014d94 100644 --- a/tests/rustdoc-json/reexport/reexport_method_from_private_module.rs +++ b/tests/rustdoc-json/reexport/reexport_method_from_private_module.rs @@ -1,9 +1,9 @@ // Regression test for . -//@ set impl_S = "$.index[?(@.docs=='impl S')].id" +//@ set impl_S = "$.index[?(@.docs[0].text=='impl S')].id" //@ has "$.index[?(@.name=='S')].inner.struct.impls[*]" $impl_S //@ set is_present = "$.index[?(@.name=='is_present')].id" -//@ is "$.index[?(@.docs=='impl S')].inner.impl.items[*]" $is_present +//@ is "$.index[?(@.docs[0].text=='impl S')].inner.impl.items[*]" $is_present //@ !has "$.index[?(@.name=='hidden_impl')]" //@ !has "$.index[?(@.name=='hidden_fn')]" diff --git a/tests/rustdoc-json/reexport/rename_public.rs b/tests/rustdoc-json/reexport/rename_public.rs index a3d712358f227..c2ed6ef89d07f 100644 --- a/tests/rustdoc-json/reexport/rename_public.rs +++ b/tests/rustdoc-json/reexport/rename_public.rs @@ -6,7 +6,7 @@ pub mod inner { //@ ismany "$.index[?(@.name=='inner')].inner.module.items[*]" $public_id pub struct Public; } -//@ set import_id = "$.index[?(@.docs=='Re-export')].id" +//@ set import_id = "$.index[?(@.docs[0].text=='Re-export')].id" //@ !has "$.index[?(@.inner.use.name=='Public')]" //@ is "$.index[?(@.inner.use.name=='NewName')].inner.use.source" \"inner::Public\" /// Re-export diff --git a/tests/rustdoc-json/reexport/same_name_different_types.rs b/tests/rustdoc-json/reexport/same_name_different_types.rs index 6e7ad3393e5da..29e08fd323f1d 100644 --- a/tests/rustdoc-json/reexport/same_name_different_types.rs +++ b/tests/rustdoc-json/reexport/same_name_different_types.rs @@ -1,12 +1,12 @@ // Regression test for . pub mod nested { - //@ set foo_struct = "$.index[?(@.docs == 'Foo the struct')].id" + //@ set foo_struct = "$.index[?(@.docs[0].text == 'Foo the struct')].id" /// Foo the struct pub struct Foo {} - //@ set foo_fn = "$.index[?(@.docs == 'Foo the function')].id" + //@ set foo_fn = "$.index[?(@.docs[0].text == 'Foo the function')].id" #[allow(non_snake_case)] /// Foo the function diff --git a/tests/rustdoc-json/reexport/same_type_reexported_more_than_once.rs b/tests/rustdoc-json/reexport/same_type_reexported_more_than_once.rs index 05b55c7b12a03..edb09dd072b8d 100644 --- a/tests/rustdoc-json/reexport/same_type_reexported_more_than_once.rs +++ b/tests/rustdoc-json/reexport/same_type_reexported_more_than_once.rs @@ -7,11 +7,11 @@ mod inner { pub trait Trait {} } -//@ set export_id = "$.index[?(@.docs=='First re-export')].id" +//@ set export_id = "$.index[?(@.docs[0].text=='First re-export')].id" //@ is "$.index[?(@.inner.use.name=='Trait')].inner.use.id" $trait_id /// First re-export pub use inner::Trait; -//@ set reexport_id = "$.index[?(@.docs=='Second re-export')].id" +//@ set reexport_id = "$.index[?(@.docs[0].text=='Second re-export')].id" //@ is "$.index[?(@.inner.use.name=='Reexport')].inner.use.id" $trait_id /// Second re-export pub use inner::Trait as Reexport; diff --git a/tests/rustdoc-json/reexport/simple_public.rs b/tests/rustdoc-json/reexport/simple_public.rs index cdb6c0dc88a3b..7cdb54cd45f1e 100644 --- a/tests/rustdoc-json/reexport/simple_public.rs +++ b/tests/rustdoc-json/reexport/simple_public.rs @@ -8,8 +8,8 @@ pub mod inner { pub struct Public; } -//@ set import_id = "$.index[?(@.docs=='Outer')].id" -//@ is "$.index[?(@.docs=='Outer')].inner.use.source" \"inner::Public\" +//@ set import_id = "$.index[?(@.docs[0].text=='Outer')].id" +//@ is "$.index[?(@.docs[0].text=='Outer')].inner.use.source" \"inner::Public\" /// Outer pub use inner::Public; diff --git a/tests/rustdoc-json/structs/tuple_pub_priv.rs b/tests/rustdoc-json/structs/tuple_pub_priv.rs index b97a17cc46ac2..747b1753d09b1 100644 --- a/tests/rustdoc-json/structs/tuple_pub_priv.rs +++ b/tests/rustdoc-json/structs/tuple_pub_priv.rs @@ -5,7 +5,7 @@ pub struct Demo( #[doc(hidden)] i32, ); -//@ set field = "$.index[?(@.docs=='field')].id" +//@ set field = "$.index[?(@.docs[0].text=='field')].id" //@ is "$.index[?(@.name=='Demo')].inner.struct.kind.tuple[0]" null //@ is "$.index[?(@.name=='Demo')].inner.struct.kind.tuple[1]" $field diff --git a/tests/rustdoc-json/traits/implementors.rs b/tests/rustdoc-json/traits/implementors.rs index 499acefedb773..b2b183573c696 100644 --- a/tests/rustdoc-json/traits/implementors.rs +++ b/tests/rustdoc-json/traits/implementors.rs @@ -6,7 +6,7 @@ impl Wham for GeorgeMichael {} // Find IDs. //@ set wham = "$.index[?(@.name=='Wham')].id" -//@ set gmWham = "$.index[?(@.docs=='Wham for George Michael')].id" +//@ set gmWham = "$.index[?(@.docs[0].text=='Wham for George Michael')].id" //@ set gm = "$.index[?(@.name=='GeorgeMichael')].id" // Both struct and trait point to impl. @@ -14,5 +14,5 @@ impl Wham for GeorgeMichael {} //@ is "$.index[?(@.name=='Wham')].inner.trait.implementations[*]" $gmWham // Impl points to both struct and trait. -//@ is "$.index[?(@.docs == 'Wham for George Michael')].inner.impl.trait.id" $wham -//@ is "$.index[?(@.docs == 'Wham for George Michael')].inner.impl.for.resolved_path.id" $gm +//@ is "$.index[?(@.docs[0].text == 'Wham for George Michael')].inner.impl.trait.id" $wham +//@ is "$.index[?(@.docs[0].text == 'Wham for George Michael')].inner.impl.for.resolved_path.id" $gm diff --git a/tests/rustdoc-json/type/extern.rs b/tests/rustdoc-json/type/extern.rs index 7963690e4484a..4345c09ee132f 100644 --- a/tests/rustdoc-json/type/extern.rs +++ b/tests/rustdoc-json/type/extern.rs @@ -5,5 +5,5 @@ extern "C" { pub type Foo; } -//@ is "$.index[?(@.docs=='No inner information')].name" '"Foo"' -//@ is "$.index[?(@.docs=='No inner information')].inner" \"extern_type\" +//@ is "$.index[?(@.docs[0].text=='No inner information')].name" '"Foo"' +//@ is "$.index[?(@.docs[0].text=='No inner information')].inner" \"extern_type\" diff --git a/tests/rustdoc-json/type/inherent_associated_type.rs b/tests/rustdoc-json/type/inherent_associated_type.rs index e96a92f7cfb4b..139e713b86ff8 100644 --- a/tests/rustdoc-json/type/inherent_associated_type.rs +++ b/tests/rustdoc-json/type/inherent_associated_type.rs @@ -18,6 +18,6 @@ impl Owner { /// iat pub type Metadata = OwnerMetadata; } -//@ set iat = '$.index[?(@.docs=="iat")].id' -//@ is '$.index[?(@.docs=="impl")].inner.impl.items[*]' $iat -//@ is '$.index[?(@.docs=="iat")].inner.assoc_type.type.resolved_path.id' $OwnerMetadata +//@ set iat = '$.index[?(@.docs[0].text=="iat")].id' +//@ is '$.index[?(@.docs[0].text=="impl")].inner.impl.items[*]' $iat +//@ is '$.index[?(@.docs[0].text=="iat")].inner.assoc_type.type.resolved_path.id' $OwnerMetadata diff --git a/tests/rustdoc-json/type/inherent_associated_type_projections.rs b/tests/rustdoc-json/type/inherent_associated_type_projections.rs index 934daba11bb1f..709bec4d08017 100644 --- a/tests/rustdoc-json/type/inherent_associated_type_projections.rs +++ b/tests/rustdoc-json/type/inherent_associated_type_projections.rs @@ -24,10 +24,10 @@ impl Parametrized { pub type Proj = String; } -//@ set param_bool = '$.index[?(@.docs=="param_bool")].id' -//@ set param_i32 = '$.index[?(@.docs=="param_i32")].id' -//@ set param_bool_proj = '$.index[?(@.docs=="param_bool_proj")].id' -//@ set param_i32_proj = '$.index[?(@.docs=="param_i32_proj")].id' +//@ set param_bool = '$.index[?(@.docs[0].text=="param_bool")].id' +//@ set param_i32 = '$.index[?(@.docs[0].text=="param_i32")].id' +//@ set param_bool_proj = '$.index[?(@.docs[0].text=="param_bool_proj")].id' +//@ set param_i32_proj = '$.index[?(@.docs[0].text=="param_i32_proj")].id' -//@ is '$.index[?(@.docs=="param_bool")].inner.impl.items[*]' $param_bool_proj -//@ is '$.index[?(@.docs=="param_i32")].inner.impl.items[*]' $param_i32_proj +//@ is '$.index[?(@.docs[0].text=="param_bool")].inner.impl.items[*]' $param_bool_proj +//@ is '$.index[?(@.docs[0].text=="param_i32")].inner.impl.items[*]' $param_i32_proj