about summary refs log tree commit diff
path: root/src/librustdoc/html/markdown.rs
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2024-12-02 12:03:32 +0100
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2024-12-02 12:03:32 +0100
commitb863c0d28b8f59f0c986fac696acf82d3d87e788 (patch)
tree3d7c1c1d7914b316839d8c0dd62283fae35d9822 /src/librustdoc/html/markdown.rs
parentcaa81728c37f5ccfa9a0979574b9272a67f8a286 (diff)
downloadrust-b863c0d28b8f59f0c986fac696acf82d3d87e788.tar.gz
rust-b863c0d28b8f59f0c986fac696acf82d3d87e788.zip
Remove static HashSet for default IDs list
Diffstat (limited to 'src/librustdoc/html/markdown.rs')
-rw-r--r--src/librustdoc/html/markdown.rs116
1 files changed, 56 insertions, 60 deletions
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index d18673c8140..5e3d06a4ae7 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -32,12 +32,11 @@ use std::iter::Peekable;
 use std::ops::{ControlFlow, Range};
 use std::path::PathBuf;
 use std::str::{self, CharIndices};
-use std::sync::OnceLock;
 
 use pulldown_cmark::{
     BrokenLink, CodeBlockKind, CowStr, Event, LinkType, Options, Parser, Tag, TagEnd, html,
 };
-use rustc_data_structures::fx::{FxHashMap, FxHashSet};
+use rustc_data_structures::fx::FxHashMap;
 use rustc_errors::{Diag, DiagMessage};
 use rustc_hir::def_id::LocalDefId;
 use rustc_middle::ty::TyCtxt;
@@ -1882,66 +1881,63 @@ pub(crate) fn rust_code_blocks(md: &str, extra_info: &ExtraInfo<'_>) -> Vec<Rust
 
 #[derive(Clone, Default, Debug)]
 pub struct IdMap {
-    map: FxHashMap<Cow<'static, str>, usize>,
+    map: FxHashMap<String, usize>,
     existing_footnotes: usize,
 }
 
-// The map is pre-initialized and then can be used as is to prevent cloning it for each item
-// (in the sidebar rendering).
-static DEFAULT_ID_MAP: OnceLock<FxHashSet<&'static str>> = OnceLock::new();
-
-fn init_id_map() -> FxHashSet<&'static str> {
-    let mut map = FxHashSet::default();
-    // This is the list of IDs used in JavaScript.
-    map.insert("help");
-    map.insert("settings");
-    map.insert("not-displayed");
-    map.insert("alternative-display");
-    map.insert("search");
-    map.insert("crate-search");
-    map.insert("crate-search-div");
-    // This is the list of IDs used in HTML generated in Rust (including the ones
-    // used in tera template files).
-    map.insert("themeStyle");
-    map.insert("settings-menu");
-    map.insert("help-button");
-    map.insert("sidebar-button");
-    map.insert("main-content");
-    map.insert("toggle-all-docs");
-    map.insert("all-types");
-    map.insert("default-settings");
-    map.insert("sidebar-vars");
-    map.insert("copy-path");
-    map.insert("rustdoc-toc");
-    map.insert("rustdoc-modnav");
-    // This is the list of IDs used by rustdoc sections (but still generated by
-    // rustdoc).
-    map.insert("fields");
-    map.insert("variants");
-    map.insert("implementors-list");
-    map.insert("synthetic-implementors-list");
-    map.insert("foreign-impls");
-    map.insert("implementations");
-    map.insert("trait-implementations");
-    map.insert("synthetic-implementations");
-    map.insert("blanket-implementations");
-    map.insert("required-associated-types");
-    map.insert("provided-associated-types");
-    map.insert("provided-associated-consts");
-    map.insert("required-associated-consts");
-    map.insert("required-methods");
-    map.insert("provided-methods");
-    map.insert("dyn-compatibility");
-    map.insert("implementors");
-    map.insert("synthetic-implementors");
-    map.insert("implementations-list");
-    map.insert("trait-implementations-list");
-    map.insert("synthetic-implementations-list");
-    map.insert("blanket-implementations-list");
-    map.insert("deref-methods");
-    map.insert("layout");
-    map.insert("aliased-type");
-    map
+fn is_default_id(id: &str) -> bool {
+    matches!(
+        id,
+        // This is the list of IDs used in JavaScript.
+        "help"
+        | "settings"
+        | "not-displayed"
+        | "alternative-display"
+        | "search"
+        | "crate-search"
+        | "crate-search-div"
+        // This is the list of IDs used in HTML generated in Rust (including the ones
+        // used in tera template files).
+        | "themeStyle"
+        | "settings-menu"
+        | "help-button"
+        | "sidebar-button"
+        | "main-content"
+        | "toggle-all-docs"
+        | "all-types"
+        | "default-settings"
+        | "sidebar-vars"
+        | "copy-path"
+        | "rustdoc-toc"
+        | "rustdoc-modnav"
+        // This is the list of IDs used by rustdoc sections (but still generated by
+        // rustdoc).
+        | "fields"
+        | "variants"
+        | "implementors-list"
+        | "synthetic-implementors-list"
+        | "foreign-impls"
+        | "implementations"
+        | "trait-implementations"
+        | "synthetic-implementations"
+        | "blanket-implementations"
+        | "required-associated-types"
+        | "provided-associated-types"
+        | "provided-associated-consts"
+        | "required-associated-consts"
+        | "required-methods"
+        | "provided-methods"
+        | "dyn-compatibility"
+        | "implementors"
+        | "synthetic-implementors"
+        | "implementations-list"
+        | "trait-implementations-list"
+        | "synthetic-implementations-list"
+        | "blanket-implementations-list"
+        | "deref-methods"
+        | "layout"
+        | "aliased-type"
+    )
 }
 
 impl IdMap {
@@ -1953,7 +1949,7 @@ impl IdMap {
         let id = match self.map.get_mut(candidate.as_ref()) {
             None => {
                 let candidate = candidate.to_string();
-                if DEFAULT_ID_MAP.get_or_init(init_id_map).contains(candidate.as_str()) {
+                if is_default_id(&candidate) {
                     let id = format!("{}-{}", candidate, 1);
                     self.map.insert(candidate.into(), 2);
                     id