diff options
| author | Dennis Hamester <dennis.hamester@gmail.com> | 2020-07-08 07:39:49 +0200 |
|---|---|---|
| committer | Dennis Hamester <dennis.hamester@gmail.com> | 2020-07-08 08:15:34 +0200 |
| commit | c8b16cdbd0f06c66467c082b9d3e190255fa295d (patch) | |
| tree | 9b11180af24feffbded13c968828fa436b259de9 | |
| parent | 8ac1525e091d3db28e67adcbbd6db1e1deaa37fb (diff) | |
| download | rust-c8b16cdbd0f06c66467c082b9d3e190255fa295d.tar.gz rust-c8b16cdbd0f06c66467c082b9d3e190255fa295d.zip | |
rustdoc: Allow linking from private items to private types
Fixes #74134 After PR #72771 this would trigger an intra_doc_link_resolution_failure warning when rustdoc is invoked without --document-private-items. Links from private items to private types are however never actually generated in that case and thus shouldn't produce a warning. These links are in fact a very useful tool to document crate internals. Tests are added for all 4 combinations of public/private items and link targets. Test 1 is the case mentioned above and fails without this commit. Tests 2 - 4 passed before already but are added nonetheless to prevent regressions.
| -rw-r--r-- | src/librustdoc/passes/collect_intra_doc_links.rs | 1 | ||||
| -rw-r--r-- | src/test/rustdoc/issue-74134-1.rs | 10 | ||||
| -rw-r--r-- | src/test/rustdoc/issue-74134-2.rs | 11 | ||||
| -rw-r--r-- | src/test/rustdoc/issue-74134-3.rs | 11 | ||||
| -rw-r--r-- | src/test/rustdoc/issue-74134-4.rs | 11 |
5 files changed, 44 insertions, 0 deletions
diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index f1d1bf439f1..86f94af0c6e 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -796,6 +796,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> { let hir_id = self.cx.tcx.hir().as_local_hir_id(local); if !self.cx.tcx.privacy_access_levels(LOCAL_CRATE).is_exported(hir_id) + && (item.visibility == Visibility::Public) && !self.cx.render_options.document_private { let item_name = item.name.as_deref().unwrap_or("<unknown>"); diff --git a/src/test/rustdoc/issue-74134-1.rs b/src/test/rustdoc/issue-74134-1.rs new file mode 100644 index 00000000000..72d38638a79 --- /dev/null +++ b/src/test/rustdoc/issue-74134-1.rs @@ -0,0 +1,10 @@ +#![deny(intra_doc_link_resolution_failure)] + +// Linking from a private item to a private type is fine without --document-private-items. + +struct Private; + +pub struct Public { + /// [`Private`] + private: Private, +} diff --git a/src/test/rustdoc/issue-74134-2.rs b/src/test/rustdoc/issue-74134-2.rs new file mode 100644 index 00000000000..f665e360b49 --- /dev/null +++ b/src/test/rustdoc/issue-74134-2.rs @@ -0,0 +1,11 @@ +// compile-flags: --document-private-items +#![deny(intra_doc_link_resolution_failure)] + +// Linking from a private item to a private type is fine with --document-private-items. + +struct Private; + +pub struct Public { + /// [`Private`] + private: Private, +} diff --git a/src/test/rustdoc/issue-74134-3.rs b/src/test/rustdoc/issue-74134-3.rs new file mode 100644 index 00000000000..b2709ecdadd --- /dev/null +++ b/src/test/rustdoc/issue-74134-3.rs @@ -0,0 +1,11 @@ +// should-fail +#![deny(intra_doc_link_resolution_failure)] + +// Linking from a public item to a private type fails without --document-private-items. + +struct Private; + +pub struct Public { + /// [`Private`] + pub public: u32, +} diff --git a/src/test/rustdoc/issue-74134-4.rs b/src/test/rustdoc/issue-74134-4.rs new file mode 100644 index 00000000000..efff74f2797 --- /dev/null +++ b/src/test/rustdoc/issue-74134-4.rs @@ -0,0 +1,11 @@ +// compile-flags: --document-private-items +#![deny(intra_doc_link_resolution_failure)] + +// Linking from a public item to a private type is fine with --document-private-items. + +struct Private; + +pub struct Public { + /// [`Private`] + pub public: u32, +} |
