@@ -32,6 +32,7 @@ use rustc_middle::ty::TyCtxt;
32
32
use rustc_span:: edition:: Edition ;
33
33
use rustc_span:: Span ;
34
34
35
+ use once_cell:: sync:: Lazy ;
35
36
use std:: borrow:: Cow ;
36
37
use std:: cell:: RefCell ;
37
38
use std:: collections:: VecDeque ;
@@ -1429,62 +1430,65 @@ crate fn rust_code_blocks(md: &str, extra_info: &ExtraInfo<'_>) -> Vec<RustCodeB
1429
1430
1430
1431
#[ derive( Clone , Default , Debug ) ]
1431
1432
pub struct IdMap {
1432
- map : FxHashMap < String , usize > ,
1433
+ map : FxHashMap < Cow < ' static , str > , usize > ,
1433
1434
}
1434
1435
1435
- fn init_id_map ( ) -> FxHashMap < String , usize > {
1436
+ // The map is pre-initialized and cloned each time to avoid reinitializing it repeatedly.
1437
+ static DEFAULT_ID_MAP : Lazy < FxHashMap < Cow < ' static , str > , usize > > = Lazy :: new ( || init_id_map ( ) ) ;
1438
+
1439
+ fn init_id_map ( ) -> FxHashMap < Cow < ' static , str > , usize > {
1436
1440
let mut map = FxHashMap :: default ( ) ;
1437
1441
// This is the list of IDs used in Javascript.
1438
- map. insert ( "help" . to_owned ( ) , 1 ) ;
1442
+ map. insert ( "help" . into ( ) , 1 ) ;
1439
1443
// This is the list of IDs used in HTML generated in Rust (including the ones
1440
1444
// used in tera template files).
1441
- map. insert ( "mainThemeStyle" . to_owned ( ) , 1 ) ;
1442
- map. insert ( "themeStyle" . to_owned ( ) , 1 ) ;
1443
- map. insert ( "theme-picker" . to_owned ( ) , 1 ) ;
1444
- map. insert ( "theme-choices" . to_owned ( ) , 1 ) ;
1445
- map. insert ( "settings-menu" . to_owned ( ) , 1 ) ;
1446
- map. insert ( "help-button" . to_owned ( ) , 1 ) ;
1447
- map. insert ( "main-content" . to_owned ( ) , 1 ) ;
1448
- map. insert ( "search" . to_owned ( ) , 1 ) ;
1449
- map. insert ( "crate-search" . to_owned ( ) , 1 ) ;
1450
- map. insert ( "render-detail" . to_owned ( ) , 1 ) ;
1451
- map. insert ( "toggle-all-docs" . to_owned ( ) , 1 ) ;
1452
- map. insert ( "all-types" . to_owned ( ) , 1 ) ;
1453
- map. insert ( "default-settings" . to_owned ( ) , 1 ) ;
1454
- map. insert ( "rustdoc-vars" . to_owned ( ) , 1 ) ;
1455
- map. insert ( "sidebar-vars" . to_owned ( ) , 1 ) ;
1456
- map. insert ( "copy-path" . to_owned ( ) , 1 ) ;
1457
- map. insert ( "TOC" . to_owned ( ) , 1 ) ;
1445
+ map. insert ( "mainThemeStyle" . into ( ) , 1 ) ;
1446
+ map. insert ( "themeStyle" . into ( ) , 1 ) ;
1447
+ map. insert ( "theme-picker" . into ( ) , 1 ) ;
1448
+ map. insert ( "theme-choices" . into ( ) , 1 ) ;
1449
+ map. insert ( "settings-menu" . into ( ) , 1 ) ;
1450
+ map. insert ( "help-button" . into ( ) , 1 ) ;
1451
+ map. insert ( "main-content" . into ( ) , 1 ) ;
1452
+ map. insert ( "search" . into ( ) , 1 ) ;
1453
+ map. insert ( "crate-search" . into ( ) , 1 ) ;
1454
+ map. insert ( "render-detail" . into ( ) , 1 ) ;
1455
+ map. insert ( "toggle-all-docs" . into ( ) , 1 ) ;
1456
+ map. insert ( "all-types" . into ( ) , 1 ) ;
1457
+ map. insert ( "default-settings" . into ( ) , 1 ) ;
1458
+ map. insert ( "rustdoc-vars" . into ( ) , 1 ) ;
1459
+ map. insert ( "sidebar-vars" . into ( ) , 1 ) ;
1460
+ map. insert ( "copy-path" . into ( ) , 1 ) ;
1461
+ map. insert ( "TOC" . into ( ) , 1 ) ;
1458
1462
// This is the list of IDs used by rustdoc sections (but still generated by
1459
1463
// rustdoc).
1460
- map. insert ( "fields" . to_owned ( ) , 1 ) ;
1461
- map. insert ( "variants" . to_owned ( ) , 1 ) ;
1462
- map. insert ( "implementors-list" . to_owned ( ) , 1 ) ;
1463
- map. insert ( "synthetic-implementors-list" . to_owned ( ) , 1 ) ;
1464
- map. insert ( "foreign-impls" . to_owned ( ) , 1 ) ;
1465
- map. insert ( "implementations" . to_owned ( ) , 1 ) ;
1466
- map. insert ( "trait-implementations" . to_owned ( ) , 1 ) ;
1467
- map. insert ( "synthetic-implementations" . to_owned ( ) , 1 ) ;
1468
- map. insert ( "blanket-implementations" . to_owned ( ) , 1 ) ;
1469
- map. insert ( "required-associated-types" . to_owned ( ) , 1 ) ;
1470
- map. insert ( "provided-associated-types" . to_owned ( ) , 1 ) ;
1471
- map. insert ( "provided-associated-consts" . to_owned ( ) , 1 ) ;
1472
- map. insert ( "required-associated-consts" . to_owned ( ) , 1 ) ;
1473
- map. insert ( "required-methods" . to_owned ( ) , 1 ) ;
1474
- map. insert ( "provided-methods" . to_owned ( ) , 1 ) ;
1475
- map. insert ( "implementors" . to_owned ( ) , 1 ) ;
1476
- map. insert ( "synthetic-implementors" . to_owned ( ) , 1 ) ;
1477
- map. insert ( "implementations-list" . to_owned ( ) , 1 ) ;
1478
- map. insert ( "trait-implementations-list" . to_owned ( ) , 1 ) ;
1479
- map. insert ( "synthetic-implementations-list" . to_owned ( ) , 1 ) ;
1480
- map. insert ( "blanket-implementations-list" . to_owned ( ) , 1 ) ;
1481
- map. insert ( "deref-methods" . to_owned ( ) , 1 ) ;
1464
+ map. insert ( "fields" . into ( ) , 1 ) ;
1465
+ map. insert ( "variants" . into ( ) , 1 ) ;
1466
+ map. insert ( "implementors-list" . into ( ) , 1 ) ;
1467
+ map. insert ( "synthetic-implementors-list" . into ( ) , 1 ) ;
1468
+ map. insert ( "foreign-impls" . into ( ) , 1 ) ;
1469
+ map. insert ( "implementations" . into ( ) , 1 ) ;
1470
+ map. insert ( "trait-implementations" . into ( ) , 1 ) ;
1471
+ map. insert ( "synthetic-implementations" . into ( ) , 1 ) ;
1472
+ map. insert ( "blanket-implementations" . into ( ) , 1 ) ;
1473
+ map. insert ( "required-associated-types" . into ( ) , 1 ) ;
1474
+ map. insert ( "provided-associated-types" . into ( ) , 1 ) ;
1475
+ map. insert ( "provided-associated-consts" . into ( ) , 1 ) ;
1476
+ map. insert ( "required-associated-consts" . into ( ) , 1 ) ;
1477
+ map. insert ( "required-methods" . into ( ) , 1 ) ;
1478
+ map. insert ( "provided-methods" . into ( ) , 1 ) ;
1479
+ map. insert ( "implementors" . into ( ) , 1 ) ;
1480
+ map. insert ( "synthetic-implementors" . into ( ) , 1 ) ;
1481
+ map. insert ( "implementations-list" . into ( ) , 1 ) ;
1482
+ map. insert ( "trait-implementations-list" . into ( ) , 1 ) ;
1483
+ map. insert ( "synthetic-implementations-list" . into ( ) , 1 ) ;
1484
+ map. insert ( "blanket-implementations-list" . into ( ) , 1 ) ;
1485
+ map. insert ( "deref-methods" . into ( ) , 1 ) ;
1482
1486
map
1483
1487
}
1484
1488
1485
1489
impl IdMap {
1486
1490
pub fn new ( ) -> Self {
1487
- IdMap { map : init_id_map ( ) }
1491
+ IdMap { map : DEFAULT_ID_MAP . clone ( ) }
1488
1492
}
1489
1493
1490
1494
crate fn derive < S : AsRef < str > + ToString > ( & mut self , candidate : S ) -> String {
@@ -1497,7 +1501,7 @@ impl IdMap {
1497
1501
}
1498
1502
} ;
1499
1503
1500
- self . map . insert ( id. clone ( ) , 1 ) ;
1504
+ self . map . insert ( id. clone ( ) . into ( ) , 1 ) ;
1501
1505
id
1502
1506
}
1503
1507
}
0 commit comments