Rollup merge of #103120 - petrochenkov:docice, r=GuillaumeGomez
rustdoc: Do not expect `doc(primitive)` modules to always exist The second commit fixes one more ICE by processing impls in crates loaded through the "load all `--extern`s" hack. Fixes https://github.com/rust-lang/rust/issues/96288 Fixes https://github.com/rust-lang/rust/issues/103028
This commit is contained in:
commit
db30a25781
@ -80,10 +80,10 @@ fn name(self, tcx: TyCtxt<'_>) -> Symbol {
|
||||
}
|
||||
}
|
||||
|
||||
fn def_id(self, tcx: TyCtxt<'_>) -> DefId {
|
||||
fn def_id(self, tcx: TyCtxt<'_>) -> Option<DefId> {
|
||||
match self {
|
||||
Res::Def(_, id) => id,
|
||||
Res::Primitive(prim) => *PrimitiveType::primitive_locations(tcx).get(&prim).unwrap(),
|
||||
Res::Def(_, id) => Some(id),
|
||||
Res::Primitive(prim) => PrimitiveType::primitive_locations(tcx).get(&prim).copied(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -1127,10 +1127,10 @@ fn resolve_link(
|
||||
}
|
||||
}
|
||||
|
||||
Some(ItemLink {
|
||||
res.def_id(self.cx.tcx).map(|page_id| ItemLink {
|
||||
link: ori_link.link.clone(),
|
||||
link_text: link_text.clone(),
|
||||
page_id: res.def_id(self.cx.tcx),
|
||||
page_id,
|
||||
fragment,
|
||||
})
|
||||
}
|
||||
|
@ -48,7 +48,6 @@ pub(crate) fn early_resolve_intra_doc_links(
|
||||
link_resolver.resolve_doc_links_local(&krate.attrs);
|
||||
link_resolver.process_module_children_or_reexports(CRATE_DEF_ID.to_def_id());
|
||||
visit::walk_crate(&mut link_resolver, krate);
|
||||
link_resolver.process_extern_impls();
|
||||
|
||||
// FIXME: somehow rustdoc is still missing crates even though we loaded all
|
||||
// the known necessary crates. Load them all unconditionally until we find a way to fix this.
|
||||
@ -58,6 +57,8 @@ pub(crate) fn early_resolve_intra_doc_links(
|
||||
link_resolver.resolver.resolve_rustdoc_path(extern_name, TypeNS, parent_scope);
|
||||
}
|
||||
|
||||
link_resolver.process_extern_impls();
|
||||
|
||||
ResolverCaches {
|
||||
markdown_links: Some(link_resolver.markdown_links),
|
||||
doc_link_resolutions: link_resolver.doc_link_resolutions,
|
||||
|
15
src/test/rustdoc/intra-doc/no-doc-primitive.rs
Normal file
15
src/test/rustdoc/intra-doc/no-doc-primitive.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// Crate tree without a `doc(primitive)` module for primitive type linked to by a doc link.
|
||||
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
#![feature(no_core, lang_items, rustc_attrs)]
|
||||
#![no_core]
|
||||
#![rustc_coherence_is_core]
|
||||
#![crate_type = "rlib"]
|
||||
|
||||
// @has no_doc_primitive/index.html
|
||||
//! A [`char`] and its [`char::len_utf8`].
|
||||
impl char {
|
||||
pub fn len_utf8(self) -> usize {
|
||||
42
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user