mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-04 19:29:07 +00:00
parent
ce21447c01
commit
9ba92972ed
@ -13,6 +13,11 @@ crate trait FormatRenderer<'tcx>: Sized {
|
|||||||
/// Gives a description of the renderer. Used for performance profiling.
|
/// Gives a description of the renderer. Used for performance profiling.
|
||||||
fn descr() -> &'static str;
|
fn descr() -> &'static str;
|
||||||
|
|
||||||
|
/// Whether to call `item` recursivly for modules
|
||||||
|
///
|
||||||
|
/// This is true for html, and false for json. See #80664
|
||||||
|
const RUN_ON_MODULE: bool;
|
||||||
|
|
||||||
/// Sets up any state required for the renderer. When this is called the cache has already been
|
/// Sets up any state required for the renderer. When this is called the cache has already been
|
||||||
/// populated.
|
/// populated.
|
||||||
fn init(
|
fn init(
|
||||||
@ -68,7 +73,7 @@ crate fn run_format<'tcx, T: FormatRenderer<'tcx>>(
|
|||||||
|
|
||||||
let unknown = Symbol::intern("<unknown item>");
|
let unknown = Symbol::intern("<unknown item>");
|
||||||
while let Some((mut cx, item)) = work.pop() {
|
while let Some((mut cx, item)) = work.pop() {
|
||||||
if item.is_mod() {
|
if item.is_mod() && T::RUN_ON_MODULE {
|
||||||
// modules are special because they add a namespace. We also need to
|
// modules are special because they add a namespace. We also need to
|
||||||
// recurse into the items of the module as well.
|
// recurse into the items of the module as well.
|
||||||
let name = item.name.as_ref().unwrap().to_string();
|
let name = item.name.as_ref().unwrap().to_string();
|
||||||
|
@ -290,6 +290,8 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> {
|
|||||||
"html"
|
"html"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const RUN_ON_MODULE: bool = true;
|
||||||
|
|
||||||
fn init(
|
fn init(
|
||||||
mut krate: clean::Crate,
|
mut krate: clean::Crate,
|
||||||
options: RenderOptions,
|
options: RenderOptions,
|
||||||
|
@ -179,7 +179,8 @@ fn from_clean_item_kind(item: clean::ItemKind, tcx: TyCtxt<'_>, name: &Option<Sy
|
|||||||
bounds: g.into_iter().map(Into::into).collect(),
|
bounds: g.into_iter().map(Into::into).collect(),
|
||||||
default: t.map(Into::into),
|
default: t.map(Into::into),
|
||||||
},
|
},
|
||||||
StrippedItem(inner) => from_clean_item_kind(*inner, tcx, name),
|
// `convert_item` early returns `None` for striped items
|
||||||
|
StrippedItem(_) => unreachable!(),
|
||||||
PrimitiveItem(_) | KeywordItem(_) => {
|
PrimitiveItem(_) | KeywordItem(_) => {
|
||||||
panic!("{:?} is not supported for JSON output", item)
|
panic!("{:?} is not supported for JSON output", item)
|
||||||
}
|
}
|
||||||
|
@ -129,6 +129,8 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> {
|
|||||||
"json"
|
"json"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const RUN_ON_MODULE: bool = false;
|
||||||
|
|
||||||
fn init(
|
fn init(
|
||||||
krate: clean::Crate,
|
krate: clean::Crate,
|
||||||
options: RenderOptions,
|
options: RenderOptions,
|
||||||
@ -169,8 +171,10 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> {
|
|||||||
e.impls = self.get_impls(id)
|
e.impls = self.get_impls(id)
|
||||||
}
|
}
|
||||||
let removed = self.index.borrow_mut().insert(from_def_id(id), new_item.clone());
|
let removed = self.index.borrow_mut().insert(from_def_id(id), new_item.clone());
|
||||||
|
|
||||||
// FIXME(adotinthevoid): Currently, the index is duplicated. This is a sanity check
|
// FIXME(adotinthevoid): Currently, the index is duplicated. This is a sanity check
|
||||||
// to make sure the items are unique.
|
// to make sure the items are unique. The main place this happens is when an item, is
|
||||||
|
// reexported in more than one place. See `rustdoc-json/reexport/in_root_and_mod`
|
||||||
if let Some(old_item) = removed {
|
if let Some(old_item) = removed {
|
||||||
assert_eq!(old_item, new_item);
|
assert_eq!(old_item, new_item);
|
||||||
}
|
}
|
||||||
|
15
src/test/rustdoc-json/reexport/in_root_and_mod.rs
Normal file
15
src/test/rustdoc-json/reexport/in_root_and_mod.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#![feature(no_core)]
|
||||||
|
#![no_core]
|
||||||
|
|
||||||
|
mod foo {
|
||||||
|
// @set foo_id = in_root_and_mod.json "$.index[*][?(@.name=='Foo')].id"
|
||||||
|
pub struct Foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @has - "$.index[*][?(@.name=='in_root_and_mod')].inner.items[*]" $foo_id
|
||||||
|
pub use foo::Foo;
|
||||||
|
|
||||||
|
pub mod bar {
|
||||||
|
// @has - "$.index[*][?(@.name=='bar')].inner.items[*]" $foo_id
|
||||||
|
pub use crate::foo::Foo;
|
||||||
|
}
|
20
src/test/rustdoc-json/reexport/in_root_and_mod_pub.rs
Normal file
20
src/test/rustdoc-json/reexport/in_root_and_mod_pub.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#![feature(no_core)]
|
||||||
|
#![no_core]
|
||||||
|
|
||||||
|
pub mod foo {
|
||||||
|
// @set bar_id = in_root_and_mod_pub.json "$.index[*][?(@.name=='Bar')].id"
|
||||||
|
// @has - "$.index[*][?(@.name=='foo')].inner.items[*]" $bar_id
|
||||||
|
pub struct Bar;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @set root_import_id = - "$.index[*][?(@.inner.span=='foo::Bar')].id"
|
||||||
|
// @is - "$.index[*][?(@.inner.span=='foo::Bar')].inner.id" $bar_id
|
||||||
|
// @has - "$.index[*][?(@.name=='in_root_and_mod_pub')].inner.items[*]" $root_import_id
|
||||||
|
pub use foo::Bar;
|
||||||
|
|
||||||
|
pub mod baz {
|
||||||
|
// @set baz_import_id = - "$.index[*][?(@.inner.span=='crate::foo::Bar')].id"
|
||||||
|
// @is - "$.index[*][?(@.inner.span=='crate::foo::Bar')].inner.id" $bar_id
|
||||||
|
// @has - "$.index[*][?(@.name=='baz')].inner.items[*]" $baz_import_id
|
||||||
|
pub use crate::foo::Bar;
|
||||||
|
}
|
14
src/test/rustdoc-json/reexport/rename_private.rs
Normal file
14
src/test/rustdoc-json/reexport/rename_private.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// edition:2018
|
||||||
|
|
||||||
|
#![no_core]
|
||||||
|
#![feature(no_core)]
|
||||||
|
// @!has rename_private.json "$.index[*][?(@.name=='inner')]"
|
||||||
|
mod inner {
|
||||||
|
// @!has - "$.index[*][?(@.name=='Public')]"
|
||||||
|
pub struct Public;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @set newname_id = - "$.index[*][?(@.name=='NewName')].id"
|
||||||
|
// @is - "$.index[*][?(@.name=='NewName')].kind" \"struct\"
|
||||||
|
// @has - "$.index[*][?(@.name=='rename_private')].inner.items[*]" $newname_id
|
||||||
|
pub use inner::Public as NewName;
|
Loading…
Reference in New Issue
Block a user