diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 2762d5e8502b2..352803855a4e7 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -2161,8 +2161,12 @@ impl Path { self.res.def_id() } + pub(crate) fn last_opt(&self) -> Option { + self.segments.last().map(|s| s.name) + } + pub(crate) fn last(&self) -> Symbol { - self.segments.last().expect("segments were empty").name + self.last_opt().expect("segments were empty") } pub(crate) fn whole_name(&self) -> String { diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs index 428519dbc16b3..54dc1b4fdeeac 100644 --- a/src/librustdoc/json/conversions.rs +++ b/src/librustdoc/json/conversions.rs @@ -666,7 +666,12 @@ impl FromWithTcx for Import { }, Glob => Import { source: import.source.path.whole_name(), - name: import.source.path.last().to_string(), + name: import + .source + .path + .last_opt() + .unwrap_or_else(|| Symbol::intern("*")) + .to_string(), id: import.source.did.map(ItemId::from).map(|i| from_item_id(i, tcx)), glob: true, }, diff --git a/src/test/rustdoc-json/glob_import.rs b/src/test/rustdoc-json/glob_import.rs new file mode 100644 index 0000000000000..d7ac952d1bbc5 --- /dev/null +++ b/src/test/rustdoc-json/glob_import.rs @@ -0,0 +1,24 @@ +// This is a regression test for . + +#![feature(no_core)] +#![no_std] +#![no_core] + +// @has glob_import.json +// @has - "$.index[*][?(@.name=='glob')]" +// @has - "$.index[*][?(@.kind=='import')].inner.name" \"*\" + + +mod m1 { + pub fn f() {} +} +mod m2 { + pub fn f(_: u8) {} +} + +pub use m1::*; +pub use m2::*; + +pub mod glob { + pub use *; +}