diff options
| author | Lukas Markeffsky <@> | 2023-07-21 21:18:37 +0200 |
|---|---|---|
| committer | Lukas Markeffsky <@> | 2023-07-22 12:14:26 +0200 |
| commit | 9ebd8095fad4ab1bc23717139402e6b3a834020a (patch) | |
| tree | fe2630096029f6a6cc3dfe2f8f13a2e31d85a570 | |
| parent | a3426170598e2b6a351c6c32dc7be2e5ba00799c (diff) | |
| download | rust-9ebd8095fad4ab1bc23717139402e6b3a834020a.tar.gz rust-9ebd8095fad4ab1bc23717139402e6b3a834020a.zip | |
fix doc links on `use` items
| -rw-r--r-- | compiler/rustc_resolve/src/late.rs | 13 | ||||
| -rw-r--r-- | tests/rustdoc/intra-doc/nested-use.rs | 16 |
2 files changed, 27 insertions, 2 deletions
diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs index 05128a51016..d74ada3250d 100644 --- a/compiler/rustc_resolve/src/late.rs +++ b/compiler/rustc_resolve/src/late.rs @@ -549,6 +549,7 @@ enum MaybeExported<'a> { Ok(NodeId), Impl(Option<DefId>), ImplItem(Result<DefId, &'a Visibility>), + NestedUse(&'a Visibility), } impl MaybeExported<'_> { @@ -559,7 +560,9 @@ impl MaybeExported<'_> { trait_def_id.as_local() } 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)) } @@ -2284,7 +2287,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { fn resolve_item(&mut self, item: &'ast Item) { let mod_inner_docs = 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)); } @@ -2428,6 +2431,12 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { } 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); } diff --git a/tests/rustdoc/intra-doc/nested-use.rs b/tests/rustdoc/intra-doc/nested-use.rs new file mode 100644 index 00000000000..19ebfff1bce --- /dev/null +++ b/tests/rustdoc/intra-doc/nested-use.rs @@ -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; +} |
