Skip to content

Commit 34e2d3b

Browse files
committed
rustdoc: Optimize IdMap
1 parent d39864d commit 34e2d3b

File tree

3 files changed

+52
-46
lines changed

3 files changed

+52
-46
lines changed

Cargo.lock

+3-2
Original file line numberDiff line numberDiff line change
@@ -2491,9 +2491,9 @@ dependencies = [
24912491

24922492
[[package]]
24932493
name = "once_cell"
2494-
version = "1.7.2"
2494+
version = "1.10.0"
24952495
source = "registry+https://github.com/rust-lang/crates.io-index"
2496-
checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
2496+
checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
24972497

24982498
[[package]]
24992499
name = "opaque-debug"
@@ -4496,6 +4496,7 @@ dependencies = [
44964496
"expect-test",
44974497
"itertools",
44984498
"minifier",
4499+
"once_cell",
44994500
"pulldown-cmark",
45004501
"rayon",
45014502
"regex",

src/librustdoc/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ regex = "1"
2222
rustdoc-json-types = { path = "../rustdoc-json-types" }
2323
tracing = "0.1"
2424
tracing-tree = "0.2.0"
25+
once_cell = "1.10.0"
2526

2627
[dependencies.tracing-subscriber]
2728
version = "0.3.3"

src/librustdoc/html/markdown.rs

+48-44
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ use rustc_middle::ty::TyCtxt;
3232
use rustc_span::edition::Edition;
3333
use rustc_span::Span;
3434

35+
use once_cell::sync::Lazy;
3536
use std::borrow::Cow;
3637
use std::cell::RefCell;
3738
use std::collections::VecDeque;
@@ -1417,62 +1418,65 @@ crate fn rust_code_blocks(md: &str, extra_info: &ExtraInfo<'_>) -> Vec<RustCodeB
14171418

14181419
#[derive(Clone, Default, Debug)]
14191420
pub struct IdMap {
1420-
map: FxHashMap<String, usize>,
1421+
map: FxHashMap<Cow<'static, str>, usize>,
14211422
}
14221423

1423-
fn init_id_map() -> FxHashMap<String, usize> {
1424+
// The map is pre-initialized and cloned each time to avoid reinitializing it repeatedly.
1425+
static DEFAULT_ID_MAP: Lazy<FxHashMap<Cow<'static, str>, usize>> = Lazy::new(|| init_id_map());
1426+
1427+
fn init_id_map() -> FxHashMap<Cow<'static, str>, usize> {
14241428
let mut map = FxHashMap::default();
14251429
// This is the list of IDs used in Javascript.
1426-
map.insert("help".to_owned(), 1);
1430+
map.insert("help".into(), 1);
14271431
// This is the list of IDs used in HTML generated in Rust (including the ones
14281432
// used in tera template files).
1429-
map.insert("mainThemeStyle".to_owned(), 1);
1430-
map.insert("themeStyle".to_owned(), 1);
1431-
map.insert("theme-picker".to_owned(), 1);
1432-
map.insert("theme-choices".to_owned(), 1);
1433-
map.insert("settings-menu".to_owned(), 1);
1434-
map.insert("help-button".to_owned(), 1);
1435-
map.insert("main-content".to_owned(), 1);
1436-
map.insert("search".to_owned(), 1);
1437-
map.insert("crate-search".to_owned(), 1);
1438-
map.insert("render-detail".to_owned(), 1);
1439-
map.insert("toggle-all-docs".to_owned(), 1);
1440-
map.insert("all-types".to_owned(), 1);
1441-
map.insert("default-settings".to_owned(), 1);
1442-
map.insert("rustdoc-vars".to_owned(), 1);
1443-
map.insert("sidebar-vars".to_owned(), 1);
1444-
map.insert("copy-path".to_owned(), 1);
1445-
map.insert("TOC".to_owned(), 1);
1433+
map.insert("mainThemeStyle".into(), 1);
1434+
map.insert("themeStyle".into(), 1);
1435+
map.insert("theme-picker".into(), 1);
1436+
map.insert("theme-choices".into(), 1);
1437+
map.insert("settings-menu".into(), 1);
1438+
map.insert("help-button".into(), 1);
1439+
map.insert("main-content".into(), 1);
1440+
map.insert("search".into(), 1);
1441+
map.insert("crate-search".into(), 1);
1442+
map.insert("render-detail".into(), 1);
1443+
map.insert("toggle-all-docs".into(), 1);
1444+
map.insert("all-types".into(), 1);
1445+
map.insert("default-settings".into(), 1);
1446+
map.insert("rustdoc-vars".into(), 1);
1447+
map.insert("sidebar-vars".into(), 1);
1448+
map.insert("copy-path".into(), 1);
1449+
map.insert("TOC".into(), 1);
14461450
// This is the list of IDs used by rustdoc sections (but still generated by
14471451
// rustdoc).
1448-
map.insert("fields".to_owned(), 1);
1449-
map.insert("variants".to_owned(), 1);
1450-
map.insert("implementors-list".to_owned(), 1);
1451-
map.insert("synthetic-implementors-list".to_owned(), 1);
1452-
map.insert("foreign-impls".to_owned(), 1);
1453-
map.insert("implementations".to_owned(), 1);
1454-
map.insert("trait-implementations".to_owned(), 1);
1455-
map.insert("synthetic-implementations".to_owned(), 1);
1456-
map.insert("blanket-implementations".to_owned(), 1);
1457-
map.insert("required-associated-types".to_owned(), 1);
1458-
map.insert("provided-associated-types".to_owned(), 1);
1459-
map.insert("provided-associated-consts".to_owned(), 1);
1460-
map.insert("required-associated-consts".to_owned(), 1);
1461-
map.insert("required-methods".to_owned(), 1);
1462-
map.insert("provided-methods".to_owned(), 1);
1463-
map.insert("implementors".to_owned(), 1);
1464-
map.insert("synthetic-implementors".to_owned(), 1);
1465-
map.insert("implementations-list".to_owned(), 1);
1466-
map.insert("trait-implementations-list".to_owned(), 1);
1467-
map.insert("synthetic-implementations-list".to_owned(), 1);
1468-
map.insert("blanket-implementations-list".to_owned(), 1);
1469-
map.insert("deref-methods".to_owned(), 1);
1452+
map.insert("fields".into(), 1);
1453+
map.insert("variants".into(), 1);
1454+
map.insert("implementors-list".into(), 1);
1455+
map.insert("synthetic-implementors-list".into(), 1);
1456+
map.insert("foreign-impls".into(), 1);
1457+
map.insert("implementations".into(), 1);
1458+
map.insert("trait-implementations".into(), 1);
1459+
map.insert("synthetic-implementations".into(), 1);
1460+
map.insert("blanket-implementations".into(), 1);
1461+
map.insert("required-associated-types".into(), 1);
1462+
map.insert("provided-associated-types".into(), 1);
1463+
map.insert("provided-associated-consts".into(), 1);
1464+
map.insert("required-associated-consts".into(), 1);
1465+
map.insert("required-methods".into(), 1);
1466+
map.insert("provided-methods".into(), 1);
1467+
map.insert("implementors".into(), 1);
1468+
map.insert("synthetic-implementors".into(), 1);
1469+
map.insert("implementations-list".into(), 1);
1470+
map.insert("trait-implementations-list".into(), 1);
1471+
map.insert("synthetic-implementations-list".into(), 1);
1472+
map.insert("blanket-implementations-list".into(), 1);
1473+
map.insert("deref-methods".into(), 1);
14701474
map
14711475
}
14721476

14731477
impl IdMap {
14741478
pub fn new() -> Self {
1475-
IdMap { map: init_id_map() }
1479+
IdMap { map: DEFAULT_ID_MAP.clone() }
14761480
}
14771481

14781482
crate fn derive<S: AsRef<str> + ToString>(&mut self, candidate: S) -> String {
@@ -1485,7 +1489,7 @@ impl IdMap {
14851489
}
14861490
};
14871491

1488-
self.map.insert(id.clone(), 1);
1492+
self.map.insert(id.clone().into(), 1);
14891493
id
14901494
}
14911495
}

0 commit comments

Comments
 (0)