@@ -37,7 +37,7 @@ use std::sync::OnceLock;
37
37
use pulldown_cmark:: {
38
38
BrokenLink , CodeBlockKind , CowStr , Event , LinkType , Options , Parser , Tag , TagEnd , html,
39
39
} ;
40
- use rustc_data_structures:: fx:: FxHashMap ;
40
+ use rustc_data_structures:: fx:: { FxHashMap , FxHashSet } ;
41
41
use rustc_errors:: { Diag , DiagMessage } ;
42
42
use rustc_hir:: def_id:: LocalDefId ;
43
43
use rustc_middle:: ty:: TyCtxt ;
@@ -1890,65 +1890,74 @@ pub struct IdMap {
1890
1890
}
1891
1891
1892
1892
// The map is pre-initialized and cloned each time to avoid reinitializing it repeatedly.
1893
- static DEFAULT_ID_MAP : OnceLock < FxHashMap < Cow < ' static , str > , usize > > = OnceLock :: new ( ) ;
1893
+ static DEFAULT_ID_MAP : OnceLock < FxHashSet < Cow < ' static , str > > > = OnceLock :: new ( ) ;
1894
1894
1895
- fn init_id_map ( ) -> FxHashMap < Cow < ' static , str > , usize > {
1896
- let mut map = FxHashMap :: default ( ) ;
1895
+ fn init_id_map ( ) -> FxHashSet < Cow < ' static , str > > {
1896
+ let mut map = FxHashSet :: default ( ) ;
1897
1897
// This is the list of IDs used in JavaScript.
1898
- map. insert ( "help" . into ( ) , 1 ) ;
1899
- map. insert ( "settings" . into ( ) , 1 ) ;
1900
- map. insert ( "not-displayed" . into ( ) , 1 ) ;
1901
- map. insert ( "alternative-display" . into ( ) , 1 ) ;
1902
- map. insert ( "search" . into ( ) , 1 ) ;
1903
- map. insert ( "crate-search" . into ( ) , 1 ) ;
1904
- map. insert ( "crate-search-div" . into ( ) , 1 ) ;
1898
+ map. insert ( "help" . into ( ) ) ;
1899
+ map. insert ( "settings" . into ( ) ) ;
1900
+ map. insert ( "not-displayed" . into ( ) ) ;
1901
+ map. insert ( "alternative-display" . into ( ) ) ;
1902
+ map. insert ( "search" . into ( ) ) ;
1903
+ map. insert ( "crate-search" . into ( ) ) ;
1904
+ map. insert ( "crate-search-div" . into ( ) ) ;
1905
1905
// This is the list of IDs used in HTML generated in Rust (including the ones
1906
1906
// used in tera template files).
1907
- map. insert ( "themeStyle" . into ( ) , 1 ) ;
1908
- map. insert ( "settings-menu" . into ( ) , 1 ) ;
1909
- map. insert ( "help-button" . into ( ) , 1 ) ;
1910
- map. insert ( "sidebar-button" . into ( ) , 1 ) ;
1911
- map. insert ( "main-content" . into ( ) , 1 ) ;
1912
- map. insert ( "toggle-all-docs" . into ( ) , 1 ) ;
1913
- map. insert ( "all-types" . into ( ) , 1 ) ;
1914
- map. insert ( "default-settings" . into ( ) , 1 ) ;
1915
- map. insert ( "sidebar-vars" . into ( ) , 1 ) ;
1916
- map. insert ( "copy-path" . into ( ) , 1 ) ;
1917
- map. insert ( "rustdoc-toc" . into ( ) , 1 ) ;
1918
- map. insert ( "rustdoc-modnav" . into ( ) , 1 ) ;
1907
+ map. insert ( "themeStyle" . into ( ) ) ;
1908
+ map. insert ( "settings-menu" . into ( ) ) ;
1909
+ map. insert ( "help-button" . into ( ) ) ;
1910
+ map. insert ( "sidebar-button" . into ( ) ) ;
1911
+ map. insert ( "main-content" . into ( ) ) ;
1912
+ map. insert ( "toggle-all-docs" . into ( ) ) ;
1913
+ map. insert ( "all-types" . into ( ) ) ;
1914
+ map. insert ( "default-settings" . into ( ) ) ;
1915
+ map. insert ( "sidebar-vars" . into ( ) ) ;
1916
+ map. insert ( "copy-path" . into ( ) ) ;
1917
+ map. insert ( "rustdoc-toc" . into ( ) ) ;
1918
+ map. insert ( "rustdoc-modnav" . into ( ) ) ;
1919
1919
// This is the list of IDs used by rustdoc sections (but still generated by
1920
1920
// rustdoc).
1921
- map. insert ( "fields" . into ( ) , 1 ) ;
1922
- map. insert ( "variants" . into ( ) , 1 ) ;
1923
- map. insert ( "implementors-list" . into ( ) , 1 ) ;
1924
- map. insert ( "synthetic-implementors-list" . into ( ) , 1 ) ;
1925
- map. insert ( "foreign-impls" . into ( ) , 1 ) ;
1926
- map. insert ( "implementations" . into ( ) , 1 ) ;
1927
- map. insert ( "trait-implementations" . into ( ) , 1 ) ;
1928
- map. insert ( "synthetic-implementations" . into ( ) , 1 ) ;
1929
- map. insert ( "blanket-implementations" . into ( ) , 1 ) ;
1930
- map. insert ( "required-associated-types" . into ( ) , 1 ) ;
1931
- map. insert ( "provided-associated-types" . into ( ) , 1 ) ;
1932
- map. insert ( "provided-associated-consts" . into ( ) , 1 ) ;
1933
- map. insert ( "required-associated-consts" . into ( ) , 1 ) ;
1934
- map. insert ( "required-methods" . into ( ) , 1 ) ;
1935
- map. insert ( "provided-methods" . into ( ) , 1 ) ;
1936
- map. insert ( "dyn-compatibility" . into ( ) , 1 ) ;
1937
- map. insert ( "implementors" . into ( ) , 1 ) ;
1938
- map. insert ( "synthetic-implementors" . into ( ) , 1 ) ;
1939
- map. insert ( "implementations-list" . into ( ) , 1 ) ;
1940
- map. insert ( "trait-implementations-list" . into ( ) , 1 ) ;
1941
- map. insert ( "synthetic-implementations-list" . into ( ) , 1 ) ;
1942
- map. insert ( "blanket-implementations-list" . into ( ) , 1 ) ;
1943
- map. insert ( "deref-methods" . into ( ) , 1 ) ;
1944
- map. insert ( "layout" . into ( ) , 1 ) ;
1945
- map. insert ( "aliased-type" . into ( ) , 1 ) ;
1921
+ map. insert ( "fields" . into ( ) ) ;
1922
+ map. insert ( "variants" . into ( ) ) ;
1923
+ map. insert ( "implementors-list" . into ( ) ) ;
1924
+ map. insert ( "synthetic-implementors-list" . into ( ) ) ;
1925
+ map. insert ( "foreign-impls" . into ( ) ) ;
1926
+ map. insert ( "implementations" . into ( ) ) ;
1927
+ map. insert ( "trait-implementations" . into ( ) ) ;
1928
+ map. insert ( "synthetic-implementations" . into ( ) ) ;
1929
+ map. insert ( "blanket-implementations" . into ( ) ) ;
1930
+ map. insert ( "required-associated-types" . into ( ) ) ;
1931
+ map. insert ( "provided-associated-types" . into ( ) ) ;
1932
+ map. insert ( "provided-associated-consts" . into ( ) ) ;
1933
+ map. insert ( "required-associated-consts" . into ( ) ) ;
1934
+ map. insert ( "required-methods" . into ( ) ) ;
1935
+ map. insert ( "provided-methods" . into ( ) ) ;
1936
+ map. insert ( "dyn-compatibility" . into ( ) ) ;
1937
+ map. insert ( "implementors" . into ( ) ) ;
1938
+ map. insert ( "synthetic-implementors" . into ( ) ) ;
1939
+ map. insert ( "implementations-list" . into ( ) ) ;
1940
+ map. insert ( "trait-implementations-list" . into ( ) ) ;
1941
+ map. insert ( "synthetic-implementations-list" . into ( ) ) ;
1942
+ map. insert ( "blanket-implementations-list" . into ( ) ) ;
1943
+ map. insert ( "deref-methods" . into ( ) ) ;
1944
+ map. insert ( "layout" . into ( ) ) ;
1945
+ map. insert ( "aliased-type" . into ( ) ) ;
1946
1946
map
1947
1947
}
1948
1948
1949
1949
impl IdMap {
1950
1950
pub fn new ( ) -> Self {
1951
- IdMap { map : DEFAULT_ID_MAP . get_or_init ( init_id_map) . clone ( ) , existing_footnotes : 0 }
1951
+ let mut id_map = IdMap { map : FxHashMap :: default ( ) , existing_footnotes : 0 } ;
1952
+ id_map. init_map ( ) ;
1953
+ id_map
1954
+ }
1955
+
1956
+ #[ allow( rustc:: potential_query_instability) ]
1957
+ fn init_map ( & mut self ) {
1958
+ for key in DEFAULT_ID_MAP . get_or_init ( init_id_map) . iter ( ) {
1959
+ self . map . insert ( key. clone ( ) , 1 ) ;
1960
+ }
1952
1961
}
1953
1962
1954
1963
pub ( crate ) fn derive < S : AsRef < str > + ToString > ( & mut self , candidate : S ) -> String {
@@ -1973,4 +1982,10 @@ impl IdMap {
1973
1982
closure ( self , & mut existing_footnotes) ;
1974
1983
self . existing_footnotes = existing_footnotes;
1975
1984
}
1985
+
1986
+ pub ( crate ) fn clear ( & mut self ) {
1987
+ self . map . clear ( ) ;
1988
+ self . init_map ( ) ;
1989
+ self . existing_footnotes = 0 ;
1990
+ }
1976
1991
}
0 commit comments