Skip to content

Commit 46afbc0

Browse files
Split ID maps in two parts: the constant one and the updated one
1 parent 8047340 commit 46afbc0

File tree

2 files changed

+57
-67
lines changed

2 files changed

+57
-67
lines changed

src/librustdoc/html/markdown.rs

Lines changed: 57 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ use std::iter::Peekable;
3232
use std::ops::{ControlFlow, Range};
3333
use std::path::PathBuf;
3434
use std::str::{self, CharIndices};
35-
use std::sync::OnceLock;
3635

3736
use pulldown_cmark::{
3837
BrokenLink, CodeBlockKind, CowStr, Event, LinkType, Options, Parser, Tag, TagEnd, html,
@@ -1883,83 +1882,81 @@ pub(crate) fn rust_code_blocks(md: &str, extra_info: &ExtraInfo<'_>) -> Vec<Rust
18831882
#[derive(Clone, Default, Debug)]
18841883
pub struct IdMap {
18851884
map: FxHashMap<Cow<'static, str>, usize>,
1885+
defined_ids: FxHashSet<&'static str>,
18861886
existing_footnotes: usize,
18871887
}
18881888

1889-
// The map is pre-initialized and cloned each time to avoid reinitializing it repeatedly.
1890-
static DEFAULT_ID_MAP: OnceLock<FxHashSet<Cow<'static, str>>> = OnceLock::new();
1891-
1892-
fn init_id_map() -> FxHashSet<Cow<'static, str>> {
1889+
fn init_id_map() -> FxHashSet<&'static str> {
18931890
let mut map = FxHashSet::default();
18941891
// This is the list of IDs used in JavaScript.
1895-
map.insert("help".into());
1896-
map.insert("settings".into());
1897-
map.insert("not-displayed".into());
1898-
map.insert("alternative-display".into());
1899-
map.insert("search".into());
1900-
map.insert("crate-search".into());
1901-
map.insert("crate-search-div".into());
1892+
map.insert("help");
1893+
map.insert("settings");
1894+
map.insert("not-displayed");
1895+
map.insert("alternative-display");
1896+
map.insert("search");
1897+
map.insert("crate-search");
1898+
map.insert("crate-search-div");
19021899
// This is the list of IDs used in HTML generated in Rust (including the ones
19031900
// used in tera template files).
1904-
map.insert("themeStyle".into());
1905-
map.insert("settings-menu".into());
1906-
map.insert("help-button".into());
1907-
map.insert("sidebar-button".into());
1908-
map.insert("main-content".into());
1909-
map.insert("toggle-all-docs".into());
1910-
map.insert("all-types".into());
1911-
map.insert("default-settings".into());
1912-
map.insert("sidebar-vars".into());
1913-
map.insert("copy-path".into());
1914-
map.insert("rustdoc-toc".into());
1915-
map.insert("rustdoc-modnav".into());
1901+
map.insert("themeStyle");
1902+
map.insert("settings-menu");
1903+
map.insert("help-button");
1904+
map.insert("sidebar-button");
1905+
map.insert("main-content");
1906+
map.insert("toggle-all-docs");
1907+
map.insert("all-types");
1908+
map.insert("default-settings");
1909+
map.insert("sidebar-vars");
1910+
map.insert("copy-path");
1911+
map.insert("rustdoc-toc");
1912+
map.insert("rustdoc-modnav");
19161913
// This is the list of IDs used by rustdoc sections (but still generated by
19171914
// rustdoc).
1918-
map.insert("fields".into());
1919-
map.insert("variants".into());
1920-
map.insert("implementors-list".into());
1921-
map.insert("synthetic-implementors-list".into());
1922-
map.insert("foreign-impls".into());
1923-
map.insert("implementations".into());
1924-
map.insert("trait-implementations".into());
1925-
map.insert("synthetic-implementations".into());
1926-
map.insert("blanket-implementations".into());
1927-
map.insert("required-associated-types".into());
1928-
map.insert("provided-associated-types".into());
1929-
map.insert("provided-associated-consts".into());
1930-
map.insert("required-associated-consts".into());
1931-
map.insert("required-methods".into());
1932-
map.insert("provided-methods".into());
1933-
map.insert("dyn-compatibility".into());
1934-
map.insert("implementors".into());
1935-
map.insert("synthetic-implementors".into());
1936-
map.insert("implementations-list".into());
1937-
map.insert("trait-implementations-list".into());
1938-
map.insert("synthetic-implementations-list".into());
1939-
map.insert("blanket-implementations-list".into());
1940-
map.insert("deref-methods".into());
1941-
map.insert("layout".into());
1942-
map.insert("aliased-type".into());
1915+
map.insert("fields");
1916+
map.insert("variants");
1917+
map.insert("implementors-list");
1918+
map.insert("synthetic-implementors-list");
1919+
map.insert("foreign-impls");
1920+
map.insert("implementations");
1921+
map.insert("trait-implementations");
1922+
map.insert("synthetic-implementations");
1923+
map.insert("blanket-implementations");
1924+
map.insert("required-associated-types");
1925+
map.insert("provided-associated-types");
1926+
map.insert("provided-associated-consts");
1927+
map.insert("required-associated-consts");
1928+
map.insert("required-methods");
1929+
map.insert("provided-methods");
1930+
map.insert("dyn-compatibility");
1931+
map.insert("implementors");
1932+
map.insert("synthetic-implementors");
1933+
map.insert("implementations-list");
1934+
map.insert("trait-implementations-list");
1935+
map.insert("synthetic-implementations-list");
1936+
map.insert("blanket-implementations-list");
1937+
map.insert("deref-methods");
1938+
map.insert("layout");
1939+
map.insert("aliased-type");
19431940
map
19441941
}
19451942

19461943
impl IdMap {
19471944
pub fn new() -> Self {
1948-
let mut id_map = IdMap { map: FxHashMap::default(), existing_footnotes: 0 };
1949-
id_map.init_map();
1950-
id_map
1951-
}
1952-
1953-
#[allow(rustc::potential_query_instability)]
1954-
fn init_map(&mut self) {
1955-
for key in DEFAULT_ID_MAP.get_or_init(init_id_map).iter() {
1956-
self.map.insert(key.clone(), 1);
1957-
}
1945+
IdMap { map: FxHashMap::default(), defined_ids: init_id_map(), existing_footnotes: 0 }
19581946
}
19591947

19601948
pub(crate) fn derive<S: AsRef<str> + ToString>(&mut self, candidate: S) -> String {
19611949
let id = match self.map.get_mut(candidate.as_ref()) {
1962-
None => candidate.to_string(),
1950+
None => {
1951+
let candidate = candidate.to_string();
1952+
if self.defined_ids.contains(candidate.as_str()) {
1953+
let id = format!("{}-{}", candidate, 1);
1954+
self.map.insert(candidate.into(), 2);
1955+
id
1956+
} else {
1957+
candidate
1958+
}
1959+
}
19631960
Some(a) => {
19641961
let id = format!("{}-{}", candidate.as_ref(), *a);
19651962
*a += 1;
@@ -1982,7 +1979,6 @@ impl IdMap {
19821979

19831980
pub(crate) fn clear(&mut self) {
19841981
self.map.clear();
1985-
self.init_map();
19861982
self.existing_footnotes = 0;
19871983
}
19881984
}

src/librustdoc/html/render/context.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,6 @@ impl ContextInfo {
8787
}
8888
}
8989

90-
// `Context` is cloned a lot, so we don't want the size to grow unexpectedly.
91-
#[cfg(all(not(windows), target_pointer_width = "64"))]
92-
rustc_data_structures::static_assert_size!(Context<'_>, 192);
93-
#[cfg(all(windows, target_pointer_width = "64"))]
94-
rustc_data_structures::static_assert_size!(Context<'_>, 200);
95-
9690
/// Shared mutable state used in [`Context`] and elsewhere.
9791
pub(crate) struct SharedContext<'tcx> {
9892
pub(crate) tcx: TyCtxt<'tcx>,

0 commit comments

Comments
 (0)