Skip to content

Commit 74d6adf

Browse files
Clone ID map instead of keeping them split
1 parent c4c6cb2 commit 74d6adf

File tree

1 file changed

+50
-59
lines changed

1 file changed

+50
-59
lines changed

src/librustdoc/html/markdown.rs

+50-59
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use std::str::{self, CharIndices};
3636
use pulldown_cmark::{
3737
BrokenLink, CodeBlockKind, CowStr, Event, LinkType, Options, Parser, Tag, TagEnd, html,
3838
};
39-
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
39+
use rustc_data_structures::fx::FxHashMap;
4040
use rustc_errors::{Diag, DiagMessage};
4141
use rustc_hir::def_id::LocalDefId;
4242
use rustc_middle::ty::TyCtxt;
@@ -1885,61 +1885,61 @@ pub(crate) fn rust_code_blocks(md: &str, extra_info: &ExtraInfo<'_>) -> Vec<Rust
18851885
#[derive(Clone, Default, Debug)]
18861886
pub struct IdMap {
18871887
map: FxHashMap<Cow<'static, str>, usize>,
1888-
defined_ids: FxHashSet<&'static str>,
1888+
defined_ids: FxHashMap<Cow<'static, str>, usize>,
18891889
existing_footnotes: usize,
18901890
}
18911891

1892-
fn init_id_map() -> FxHashSet<&'static str> {
1893-
let mut map = FxHashSet::default();
1892+
fn init_id_map() -> FxHashMap<Cow<'static, str>, usize> {
1893+
let mut map = FxHashMap::default();
18941894
// This is the list of IDs used in JavaScript.
1895-
map.insert("help");
1896-
map.insert("settings");
1897-
map.insert("not-displayed");
1898-
map.insert("alternative-display");
1899-
map.insert("search");
1900-
map.insert("crate-search");
1901-
map.insert("crate-search-div");
1895+
map.insert("help".into(), 1);
1896+
map.insert("settings".into(), 1);
1897+
map.insert("not-displayed".into(), 1);
1898+
map.insert("alternative-display".into(), 1);
1899+
map.insert("search".into(), 1);
1900+
map.insert("crate-search".into(), 1);
1901+
map.insert("crate-search-div".into(), 1);
19021902
// This is the list of IDs used in HTML generated in Rust (including the ones
19031903
// used in tera template files).
1904-
map.insert("themeStyle");
1905-
map.insert("settings-menu");
1906-
map.insert("help-button");
1907-
map.insert("sidebar-button");
1908-
map.insert("main-content");
1909-
map.insert("toggle-all-docs");
1910-
map.insert("all-types");
1911-
map.insert("default-settings");
1912-
map.insert("sidebar-vars");
1913-
map.insert("copy-path");
1914-
map.insert("rustdoc-toc");
1915-
map.insert("rustdoc-modnav");
1904+
map.insert("themeStyle".into(), 1);
1905+
map.insert("settings-menu".into(), 1);
1906+
map.insert("help-button".into(), 1);
1907+
map.insert("sidebar-button".into(), 1);
1908+
map.insert("main-content".into(), 1);
1909+
map.insert("toggle-all-docs".into(), 1);
1910+
map.insert("all-types".into(), 1);
1911+
map.insert("default-settings".into(), 1);
1912+
map.insert("sidebar-vars".into(), 1);
1913+
map.insert("copy-path".into(), 1);
1914+
map.insert("rustdoc-toc".into(), 1);
1915+
map.insert("rustdoc-modnav".into(), 1);
19161916
// This is the list of IDs used by rustdoc sections (but still generated by
19171917
// rustdoc).
1918-
map.insert("fields");
1919-
map.insert("variants");
1920-
map.insert("implementors-list");
1921-
map.insert("synthetic-implementors-list");
1922-
map.insert("foreign-impls");
1923-
map.insert("implementations");
1924-
map.insert("trait-implementations");
1925-
map.insert("synthetic-implementations");
1926-
map.insert("blanket-implementations");
1927-
map.insert("required-associated-types");
1928-
map.insert("provided-associated-types");
1929-
map.insert("provided-associated-consts");
1930-
map.insert("required-associated-consts");
1931-
map.insert("required-methods");
1932-
map.insert("provided-methods");
1933-
map.insert("dyn-compatibility");
1934-
map.insert("implementors");
1935-
map.insert("synthetic-implementors");
1936-
map.insert("implementations-list");
1937-
map.insert("trait-implementations-list");
1938-
map.insert("synthetic-implementations-list");
1939-
map.insert("blanket-implementations-list");
1940-
map.insert("deref-methods");
1941-
map.insert("layout");
1942-
map.insert("aliased-type");
1918+
map.insert("fields".into(), 1);
1919+
map.insert("variants".into(), 1);
1920+
map.insert("implementors-list".into(), 1);
1921+
map.insert("synthetic-implementors-list".into(), 1);
1922+
map.insert("foreign-impls".into(), 1);
1923+
map.insert("implementations".into(), 1);
1924+
map.insert("trait-implementations".into(), 1);
1925+
map.insert("synthetic-implementations".into(), 1);
1926+
map.insert("blanket-implementations".into(), 1);
1927+
map.insert("required-associated-types".into(), 1);
1928+
map.insert("provided-associated-types".into(), 1);
1929+
map.insert("provided-associated-consts".into(), 1);
1930+
map.insert("required-associated-consts".into(), 1);
1931+
map.insert("required-methods".into(), 1);
1932+
map.insert("provided-methods".into(), 1);
1933+
map.insert("dyn-compatibility".into(), 1);
1934+
map.insert("implementors".into(), 1);
1935+
map.insert("synthetic-implementors".into(), 1);
1936+
map.insert("implementations-list".into(), 1);
1937+
map.insert("trait-implementations-list".into(), 1);
1938+
map.insert("synthetic-implementations-list".into(), 1);
1939+
map.insert("blanket-implementations-list".into(), 1);
1940+
map.insert("deref-methods".into(), 1);
1941+
map.insert("layout".into(), 1);
1942+
map.insert("aliased-type".into(), 1);
19431943
map
19441944
}
19451945

@@ -1950,16 +1950,7 @@ impl IdMap {
19501950

19511951
pub(crate) fn derive<S: AsRef<str> + ToString>(&mut self, candidate: S) -> String {
19521952
let id = match self.map.get_mut(candidate.as_ref()) {
1953-
None => {
1954-
let candidate = candidate.to_string();
1955-
if self.defined_ids.contains(candidate.as_str()) {
1956-
let id = format!("{}-{}", candidate, 1);
1957-
self.map.insert(candidate.into(), 2);
1958-
id
1959-
} else {
1960-
candidate.to_string()
1961-
}
1962-
}
1953+
None => candidate.to_string(),
19631954
Some(a) => {
19641955
let id = format!("{}-{}", candidate.as_ref(), *a);
19651956
*a += 1;
@@ -1981,7 +1972,7 @@ impl IdMap {
19811972
}
19821973

19831974
pub(crate) fn clear(&mut self) {
1984-
self.map.clear();
1975+
self.map = self.defined_ids.clone();
19851976
self.existing_footnotes = 0;
19861977
}
19871978
}

0 commit comments

Comments
 (0)