1
Fork 0

fix doc links on use items

This commit is contained in:
Lukas Markeffsky 2023-07-21 21:18:37 +02:00
parent a342617059
commit 9ebd8095fa
2 changed files with 27 additions and 2 deletions

View file

@ -549,6 +549,7 @@ enum MaybeExported<'a> {
Ok(NodeId), Ok(NodeId),
Impl(Option<DefId>), Impl(Option<DefId>),
ImplItem(Result<DefId, &'a Visibility>), ImplItem(Result<DefId, &'a Visibility>),
NestedUse(&'a Visibility),
} }
impl MaybeExported<'_> { impl MaybeExported<'_> {
@ -559,7 +560,9 @@ impl MaybeExported<'_> {
trait_def_id.as_local() trait_def_id.as_local()
} }
MaybeExported::Impl(None) => return true, MaybeExported::Impl(None) => return true,
MaybeExported::ImplItem(Err(vis)) => return vis.kind.is_pub(), MaybeExported::ImplItem(Err(vis)) | MaybeExported::NestedUse(vis) => {
return vis.kind.is_pub();
}
}; };
def_id.map_or(true, |def_id| r.effective_visibilities.is_exported(def_id)) def_id.map_or(true, |def_id| r.effective_visibilities.is_exported(def_id))
} }
@ -2284,7 +2287,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
fn resolve_item(&mut self, item: &'ast Item) { fn resolve_item(&mut self, item: &'ast Item) {
let mod_inner_docs = let mod_inner_docs =
matches!(item.kind, ItemKind::Mod(..)) && rustdoc::inner_docs(&item.attrs); matches!(item.kind, ItemKind::Mod(..)) && rustdoc::inner_docs(&item.attrs);
if !mod_inner_docs && !matches!(item.kind, ItemKind::Impl(..)) { if !mod_inner_docs && !matches!(item.kind, ItemKind::Impl(..) | ItemKind::Use(..)) {
self.resolve_doc_links(&item.attrs, MaybeExported::Ok(item.id)); self.resolve_doc_links(&item.attrs, MaybeExported::Ok(item.id));
} }
@ -2428,6 +2431,12 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
} }
ItemKind::Use(ref use_tree) => { ItemKind::Use(ref use_tree) => {
let maybe_exported = match use_tree.kind {
UseTreeKind::Simple(_) | UseTreeKind::Glob => MaybeExported::Ok(item.id),
UseTreeKind::Nested(_) => MaybeExported::NestedUse(&item.vis),
};
self.resolve_doc_links(&item.attrs, maybe_exported);
self.future_proof_import(use_tree); self.future_proof_import(use_tree);
} }

View file

@ -0,0 +1,16 @@
// Regression test for issue #113896: Intra-doc links on nested use items.
#![crate_name = "foo"]
// @has foo/struct.Foo.html
// @has - '//a[@href="struct.Foo.html"]' 'Foo'
// @has - '//a[@href="struct.Bar.html"]' 'Bar'
/// [`Foo`]
pub use m::{Foo, Bar};
mod m {
/// [`Bar`]
pub struct Foo;
pub struct Bar;
}