Skip to content

Commit a8a40ea

Browse files
author
Mukund Lakshman
committed
librustdoc: Use correct heading levels.
- Avoid multiple <h1>s on a page. - The <h#> tags should follow a semantic hierarchy. - Cap at h6 (no h7)
1 parent e737694 commit a8a40ea

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+147
-118
lines changed

compiler/rustc_error_codes/src/error_codes/E0001.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0002.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0007.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0009.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0014.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0073.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0074.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0087.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0088.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0089.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0090.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0136.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0137.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0139.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0154.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0162.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0165.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0193.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0205.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0211.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0243.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0244.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0251.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0256.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0281.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0297.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0301.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0302.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0303.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0329.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0383.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0386.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0387.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0389.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0398.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0399.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0439.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0447.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0448.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0497.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0504.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0595.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0619.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0633.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0665.md

+1-1

compiler/rustc_error_codes/src/error_codes/E0671.md

+1-1

src/librustdoc/externalfiles.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ impl ExternalHtml {
3939
let bc = format!(
4040
"{}{}",
4141
bc,
42-
Markdown(&m_bc, &[], id_map, codes, edition, playground).into_string()
42+
Markdown(&m_bc, &[], id_map, codes, edition, playground, 0).into_string()
4343
);
4444
let ac = load_external_files(after_content, diag)?;
4545
let m_ac = load_external_files(md_after_content, diag)?;
4646
let ac = format!(
4747
"{}{}",
4848
ac,
49-
Markdown(&m_ac, &[], id_map, codes, edition, playground).into_string()
49+
Markdown(&m_ac, &[], id_map, codes, edition, playground, 0).into_string()
5050
);
5151
Some(ExternalHtml { in_header: ih, before_content: bc, after_content: ac })
5252
}

src/librustdoc/html/markdown.rs

+13-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
//!
1313
//! let s = "My *markdown* _text_";
1414
//! let mut id_map = IdMap::new();
15-
//! let md = Markdown(s, &[], &mut id_map, ErrorCodes::Yes, Edition::Edition2015, &None);
15+
//! let md = Markdown(s, &[], &mut id_map, ErrorCodes::Yes, Edition::Edition2015, &None, 0);
1616
//! let html = md.into_string();
1717
//! // ... something using html
1818
//! ```
@@ -47,6 +47,8 @@ use pulldown_cmark::{
4747
#[cfg(test)]
4848
mod tests;
4949

50+
const MAX_HEADER_LEVEL: u32 = 6;
51+
5052
/// Options for rendering Markdown in the main body of documentation.
5153
pub(crate) fn main_body_opts() -> Options {
5254
Options::ENABLE_TABLES
@@ -78,6 +80,7 @@ pub struct Markdown<'a>(
7880
/// Default edition to use when parsing doctests (to add a `fn main`).
7981
pub Edition,
8082
pub &'a Option<Playground>,
83+
pub u32,
8184
);
8285
/// A tuple struct like `Markdown` that renders the markdown with a table of contents.
8386
crate struct MarkdownWithToc<'a>(
@@ -489,11 +492,12 @@ struct HeadingLinks<'a, 'b, 'ids, I> {
489492
toc: Option<&'b mut TocBuilder>,
490493
buf: VecDeque<SpannedEvent<'a>>,
491494
id_map: &'ids mut IdMap,
495+
level: u32,
492496
}
493497

494498
impl<'a, 'b, 'ids, I> HeadingLinks<'a, 'b, 'ids, I> {
495-
fn new(iter: I, toc: Option<&'b mut TocBuilder>, ids: &'ids mut IdMap) -> Self {
496-
HeadingLinks { inner: iter, toc, buf: VecDeque::new(), id_map: ids }
499+
fn new(iter: I, toc: Option<&'b mut TocBuilder>, ids: &'ids mut IdMap, level: u32) -> Self {
500+
HeadingLinks { inner: iter, toc, buf: VecDeque::new(), id_map: ids, level }
497501
}
498502
}
499503

@@ -530,6 +534,7 @@ impl<'a, 'b, 'ids, I: Iterator<Item = SpannedEvent<'a>>> Iterator
530534
self.buf.push_front((Event::Html(format!("{} ", sec).into()), 0..0));
531535
}
532536

537+
let level = std::cmp::min(level + self.level + 1, MAX_HEADER_LEVEL);
533538
self.buf.push_back((Event::Html(format!("</a></h{}>", level).into()), 0..0));
534539

535540
let start_tags = format!(
@@ -1005,7 +1010,7 @@ impl LangString {
10051010

10061011
impl Markdown<'_> {
10071012
pub fn into_string(self) -> String {
1008-
let Markdown(md, links, mut ids, codes, edition, playground) = self;
1013+
let Markdown(md, links, mut ids, codes, edition, playground, level) = self;
10091014

10101015
// This is actually common enough to special-case
10111016
if md.is_empty() {
@@ -1026,7 +1031,7 @@ impl Markdown<'_> {
10261031

10271032
let mut s = String::with_capacity(md.len() * 3 / 2);
10281033

1029-
let p = HeadingLinks::new(p, None, &mut ids);
1034+
let p = HeadingLinks::new(p, None, &mut ids, level);
10301035
let p = Footnotes::new(p);
10311036
let p = LinkReplacer::new(p.map(|(ev, _)| ev), links);
10321037
let p = TableWrapper::new(p);
@@ -1048,7 +1053,7 @@ impl MarkdownWithToc<'_> {
10481053
let mut toc = TocBuilder::new();
10491054

10501055
{
1051-
let p = HeadingLinks::new(p, Some(&mut toc), &mut ids);
1056+
let p = HeadingLinks::new(p, Some(&mut toc), &mut ids, 0);
10521057
let p = Footnotes::new(p);
10531058
let p = TableWrapper::new(p.map(|(ev, _)| ev));
10541059
let p = CodeBlocks::new(p, codes, edition, playground);
@@ -1077,7 +1082,7 @@ impl MarkdownHtml<'_> {
10771082

10781083
let mut s = String::with_capacity(md.len() * 3 / 2);
10791084

1080-
let p = HeadingLinks::new(p, None, &mut ids);
1085+
let p = HeadingLinks::new(p, None, &mut ids, 0);
10811086
let p = Footnotes::new(p);
10821087
let p = TableWrapper::new(p.map(|(ev, _)| ev));
10831088
let p = CodeBlocks::new(p, codes, edition, playground);
@@ -1295,7 +1300,7 @@ crate fn markdown_links(md: &str) -> Vec<MarkdownLink> {
12951300
// There's no need to thread an IdMap through to here because
12961301
// the IDs generated aren't going to be emitted anywhere.
12971302
let mut ids = IdMap::new();
1298-
let iter = Footnotes::new(HeadingLinks::new(p, None, &mut ids));
1303+
let iter = Footnotes::new(HeadingLinks::new(p, None, &mut ids, 0));
12991304

13001305
for ev in iter {
13011306
if let Event::Start(Tag::Link(kind, dest, _)) = ev.0 {

0 commit comments

Comments
 (0)