Rollup merge of #84380 - Smittyvb:rdoc-title-order, r=jsha

Write Rustdoc titles like "x in crate::mod - Rust"

This makes Rustdoc titles for items be like "Widget in cratename::blah::foo - Rust". Titles for modules and other non-items are unchanged, and still read like "cratename::blah::foo - Rust". This makes managing several open Rustdoc tabs easier.

![A screenshot of several open Rustdoc tabs](https://user-images.githubusercontent.com/10530973/115457675-d608f180-a1f2-11eb-87a8-838a32b4e3f7.png)

This also adds some tests for the new title behavior.

Closes #84371.
This commit is contained in:
Mara Bos 2021-04-21 23:06:20 +02:00 committed by GitHub
commit 2cddda3af1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 56 additions and 20 deletions

View File

@ -167,19 +167,18 @@ pub(super) fn root_path(&self) -> String {
"../".repeat(self.current.len())
}
fn render_item(&self, it: &clean::Item, pushname: bool) -> String {
let mut title = if it.is_primitive() || it.is_keyword() {
// No need to include the namespace for primitive types and keywords
String::new()
} else {
self.current.join("::")
};
if pushname {
if !title.is_empty() {
title.push_str("::");
}
fn render_item(&self, it: &clean::Item, is_module: bool) -> String {
let mut title = String::new();
if !is_module {
title.push_str(&it.name.unwrap().as_str());
}
if !it.is_primitive() && !it.is_keyword() {
if !is_module {
title.push_str(" in ");
}
// No need to include the namespace for primitive types and keywords
title.push_str(&self.current.join("::"));
};
title.push_str(" - Rust");
let tyname = it.type_();
let desc = it.doc_value().as_ref().map(|doc| plain_text_summary(&doc));
@ -598,7 +597,7 @@ fn mod_item_in(&mut self, item: &clean::Item, item_name: &str) -> Result<(), Err
info!("Recursing into {}", self.dst.display());
let buf = self.render_item(item, false);
let buf = self.render_item(item, true);
// buf will be empty if the module is stripped and there is no redirect for it
if !buf.is_empty() {
self.shared.ensure_dir(&self.dst)?;
@ -641,7 +640,7 @@ fn item(&mut self, item: clean::Item) -> Result<(), Error> {
self.render_redirect_pages = item.is_stripped();
}
let buf = self.render_item(&item, true);
let buf = self.render_item(&item, false);
// buf will be empty if the item is stripped and there is no redirect for it
if !buf.is_empty() {
let name = item.name.as_ref().unwrap();

View File

@ -1,7 +0,0 @@
#![crate_name = "foo"]
// @has foo/primitive.u8.html '//head/title' 'u8 - Rust'
// @!has - '//head/title' 'foo'
#[doc(primitive = "u8")]
/// `u8` docs
mod u8 {}

View File

@ -0,0 +1,44 @@
#![crate_name = "foo"]
#![feature(doc_keyword)]
// tests for the html <title> element
// @has foo/index.html '//head/title' 'foo - Rust'
// @has foo/fn.widget_count.html '//head/title' 'widget_count in foo - Rust'
/// blah
pub fn widget_count() {}
// @has foo/struct.Widget.html '//head/title' 'Widget in foo - Rust'
pub struct Widget;
// @has foo/constant.ANSWER.html '//head/title' 'ANSWER in foo - Rust'
pub const ANSWER: u8 = 42;
// @has foo/blah/index.html '//head/title' 'foo::blah - Rust'
pub mod blah {
// @has foo/blah/struct.Widget.html '//head/title' 'Widget in foo::blah - Rust'
pub struct Widget;
// @has foo/blah/trait.Awesome.html '//head/title' 'Awesome in foo::blah - Rust'
pub trait Awesome {}
// @has foo/blah/fn.make_widget.html '//head/title' 'make_widget in foo::blah - Rust'
pub fn make_widget() {}
// @has foo/macro.cool_macro.html '//head/title' 'cool_macro in foo - Rust'
#[macro_export]
macro_rules! cool_macro {
($t:tt) => { $t }
}
}
// @has foo/keyword.continue.html '//head/title' 'continue - Rust'
#[doc(keyword = "continue")]
mod continue_keyword {}
// @has foo/primitive.u8.html '//head/title' 'u8 - Rust'
// @!has - '//head/title' 'foo'
#[doc(primitive = "u8")]
/// `u8` docs
mod u8 {}