@@ -26,7 +26,6 @@ crate enum ExternalLocation {
2626/// Builds the search index from the collected metadata
2727crate fn build_index < ' tcx > ( krate : & clean:: Crate , cache : & mut Cache , tcx : TyCtxt < ' tcx > ) -> String {
2828 let mut defid_to_pathid = FxHashMap :: default ( ) ;
29- let mut crate_items = Vec :: with_capacity ( cache. search_index . len ( ) ) ;
3029 let mut crate_paths = vec ! [ ] ;
3130
3231 // Attach all orphan items to the type's definition if the type
@@ -77,34 +76,38 @@ crate fn build_index<'tcx>(krate: &clean::Crate, cache: &mut Cache, tcx: TyCtxt<
7776
7877 // Reduce `DefId` in paths into smaller sequential numbers,
7978 // and prune the paths that do not appear in the index.
80- let mut lastpath = String :: new ( ) ;
79+ let mut lastpath = "" ;
8180 let mut lastpathid = 0usize ;
8281
83- for item in search_index {
84- item. parent_idx = item. parent . and_then ( |defid| match defid_to_pathid. entry ( defid) {
85- Entry :: Occupied ( entry) => Some ( * entry. get ( ) ) ,
86- Entry :: Vacant ( entry) => {
87- let pathid = lastpathid;
88- entry. insert ( pathid) ;
89- lastpathid += 1 ;
82+ let crate_items: Vec < & IndexItem > = search_index
83+ . iter_mut ( )
84+ . map ( |item| {
85+ item. parent_idx = item. parent . and_then ( |defid| match defid_to_pathid. entry ( defid) {
86+ Entry :: Occupied ( entry) => Some ( * entry. get ( ) ) ,
87+ Entry :: Vacant ( entry) => {
88+ let pathid = lastpathid;
89+ entry. insert ( pathid) ;
90+ lastpathid += 1 ;
9091
91- if let Some ( & ( ref fqp, short) ) = paths. get ( & defid) {
92- crate_paths. push ( ( short, fqp. last ( ) . unwrap ( ) . clone ( ) ) ) ;
93- Some ( pathid)
94- } else {
95- None
92+ if let Some ( & ( ref fqp, short) ) = paths. get ( & defid) {
93+ crate_paths. push ( ( short, fqp. last ( ) . unwrap ( ) . clone ( ) ) ) ;
94+ Some ( pathid)
95+ } else {
96+ None
97+ }
9698 }
99+ } ) ;
100+
101+ // Omit the parent path if it is same to that of the prior item.
102+ if lastpath == & item. path {
103+ item. path . clear ( ) ;
104+ } else {
105+ lastpath = & item. path ;
97106 }
98- } ) ;
99107
100- // Omit the parent path if it is same to that of the prior item.
101- if lastpath == item. path {
102- item. path . clear ( ) ;
103- } else {
104- lastpath = item. path . clone ( ) ;
105- }
106- crate_items. push ( & * item) ;
107- }
108+ & * item
109+ } )
110+ . collect ( ) ;
108111
109112 struct CrateData < ' a > {
110113 doc : String ,
0 commit comments