Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rustdoc: do not show primitives and keywords as private #95530

Merged
merged 1 commit into from
Apr 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions src/librustdoc/clean/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -471,14 +471,17 @@ impl Item {
) -> Item {
trace!("name={:?}, def_id={:?}", name, def_id);

Item {
def_id: def_id.into(),
kind: box kind,
name,
attrs,
visibility: cx.tcx.visibility(def_id).clean(cx),
cfg,
}
// Primitives and Keywords are written in the source code as private modules.
// The modules need to be private so that nobody actually uses them, but the
// keywords and primitives that they are documenting are public.
let visibility = if matches!(&kind, ItemKind::KeywordItem(..) | ItemKind::PrimitiveItem(..))
{
Visibility::Public
} else {
cx.tcx.visibility(def_id).clean(cx)
};

Item { def_id: def_id.into(), kind: box kind, name, attrs, visibility, cfg }
}

/// Finds all `doc` attributes as NameValues and returns their corresponding values, joined
Expand Down
1 change: 1 addition & 0 deletions src/test/rustdoc/keyword.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
// @has foo/index.html '//a/@href' '../foo/index.html'
// @!has foo/foo/index.html
// @!has-dir foo/foo
// @!has foo/index.html '//span' '🔒'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: You could make this test more robust by specifying that 🔒 should not appear anywhere in the whole page. I think you can do that by using / as the path (selecting the root element), because the string match part uses substring matching.

Also it occurs to me that we will have to be careful to update these negative tests if/when we switch the emoji to an SVG icon.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

13: Non-absolute XPath is not supported due to implementation issues
	// @!has foo/index.html '/' '🔒'

#[doc(keyword = "match")]
/// this is a test!
mod foo{}
Expand Down
21 changes: 21 additions & 0 deletions src/test/rustdoc/primitive.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#![crate_name = "foo"]

#![feature(rustdoc_internals)]

// @has foo/index.html '//h2[@id="primitives"]' 'Primitive Types'
// @has foo/index.html '//a[@href="primitive.i32.html"]' 'i32'
// @has foo/index.html '//div[@class="sidebar-elems"]//li/a' 'Primitive Types'
// @has foo/index.html '//div[@class="sidebar-elems"]//li/a/@href' '#primitives'
// @has foo/primitive.i32.html '//a[@class="primitive"]' 'i32'
// @has foo/primitive.i32.html '//span[@class="in-band"]' 'Primitive Type i32'
// @has foo/primitive.i32.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
// @has foo/index.html '//a/@href' '../foo/index.html'
// @!has foo/index.html '//span' '🔒'
#[doc(primitive = "i32")]
/// this is a test!
mod i32{}

// @has foo/primitive.bool.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
#[doc(primitive = "bool")]
/// hello
mod bool {}