Skip to content

Commit

Permalink
Rollup merge of #92349 - avitex:fix-rustdoc-private-doc-tests, r=Guil…
Browse files Browse the repository at this point in the history
…laumeGomez

Fix rustdoc::private_doc_tests lint for public re-exported items

Closes #72081

This involves changing the lint to check the access level is exported, rather than public.
The [exported access level](https://github.com/rust-lang/rust/blob/e91ad5fc62bdee4a29c18baa5fad2ca42fc91bf4/compiler/rustc_middle/src/middle/privacy.rs#L24) accounts for public items and items accessible to other crates with the help of `pub use` re-exports.
The pattern of re-exporting public items from a private module is usage seen in a number of popular crates.
  • Loading branch information
matthiaskrgr authored Jan 6, 2022
2 parents 2647ce2 + 992646b commit 4d0b567
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/librustdoc/passes/check_doc_test_visibility.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ crate fn look_for_tests<'tcx>(cx: &DocContext<'tcx>, dox: &str, item: &Item) {
);
}
} else if tests.found_tests > 0
&& !cx.cache.access_levels.is_public(item.def_id.expect_def_id())
&& !cx.cache.access_levels.is_exported(item.def_id.expect_def_id())
{
cx.tcx.struct_span_lint_hir(
crate::lint::PRIVATE_DOC_TESTS,
Expand Down
11 changes: 11 additions & 0 deletions src/test/rustdoc-ui/private-public-item-doc-test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#![deny(rustdoc::private_doc_tests)]

mod foo {
/// private doc test
///
/// ```
/// assert!(false);
/// ```
//~^^^^^ ERROR documentation test in private item
pub fn bar() {}
}
18 changes: 18 additions & 0 deletions src/test/rustdoc-ui/private-public-item-doc-test.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
error: documentation test in private item
--> $DIR/private-public-item-doc-test.rs:4:5
|
LL | / /// private doc test
LL | | ///
LL | | /// ```
LL | | /// assert!(false);
LL | | /// ```
| |___________^
|
note: the lint level is defined here
--> $DIR/private-public-item-doc-test.rs:1:9
|
LL | #![deny(rustdoc::private_doc_tests)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to previous error

16 changes: 16 additions & 0 deletions src/test/rustdoc-ui/public-reexported-item-doc-test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// check-pass

#![deny(rustdoc::private_doc_tests)]

pub fn foo() {}

mod private {
/// re-exported doc test
///
/// ```
/// assert!(true);
/// ```
pub fn bar() {}
}

pub use private::bar;

0 comments on commit 4d0b567

Please sign in to comment.