@@ -32,6 +32,7 @@ use rustc_middle::ty::TyCtxt;
3232use rustc_span:: edition:: Edition ;
3333use rustc_span:: Span ;
3434
35+ use once_cell:: sync:: Lazy ;
3536use std:: borrow:: Cow ;
3637use std:: cell:: RefCell ;
3738use 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 ) ]
14191420pub 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
14731477impl 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