@@ -6,8 +6,8 @@ use rustc_middle::middle::privacy::AccessLevels;
66use rustc_middle:: ty:: TyCtxt ;
77use rustc_span:: symbol:: sym;
88
9- use crate :: clean:: { self , ItemId , PrimitiveType } ;
10- use crate :: config :: RenderOptions ;
9+ use crate :: clean:: { self , ExternalCrate , ItemId , PrimitiveType } ;
10+ use crate :: core :: DocContext ;
1111use crate :: fold:: DocFolder ;
1212use crate :: formats:: item_type:: ItemType ;
1313use crate :: formats:: Impl ;
@@ -136,46 +136,47 @@ impl Cache {
136136
137137 /// Populates the `Cache` with more data. The returned `Crate` will be missing some data that was
138138 /// in `krate` due to the data being moved into the `Cache`.
139- crate fn populate (
140- & mut self ,
141- mut krate : clean:: Crate ,
142- tcx : TyCtxt < ' _ > ,
143- render_options : & RenderOptions ,
144- ) -> clean:: Crate {
139+ crate fn populate ( cx : & mut DocContext < ' _ > , mut krate : clean:: Crate ) -> clean:: Crate {
140+ let tcx = cx. tcx ;
141+
145142 // Crawl the crate to build various caches used for the output
146- debug ! ( ?self . crate_version) ;
147- self . traits = krate. external_traits . take ( ) ;
148- let RenderOptions { extern_html_root_takes_precedence, output : dst, .. } = render_options;
143+ debug ! ( ?cx. cache. crate_version) ;
144+ cx. cache . traits = krate. external_traits . take ( ) ;
149145
150146 // Cache where all our extern crates are located
151147 // FIXME: this part is specific to HTML so it'd be nice to remove it from the common code
152- for & e in & krate. externs {
148+ for & crate_num in cx. tcx . crates ( ( ) ) {
149+ let e = ExternalCrate { crate_num } ;
150+
153151 let name = e. name ( tcx) ;
152+ let render_options = & cx. render_options ;
154153 let extern_url =
155154 render_options. extern_html_root_urls . get ( & * name. as_str ( ) ) . map ( |u| & * * u) ;
156- let location = e. location ( extern_url, * extern_html_root_takes_precedence, dst, tcx) ;
157- self . extern_locations . insert ( e. crate_num , location) ;
158- self . external_paths . insert ( e. def_id ( ) , ( vec ! [ name. to_string( ) ] , ItemType :: Module ) ) ;
155+ let extern_url_takes_precedence = render_options. extern_html_root_takes_precedence ;
156+ let dst = & render_options. output ;
157+ let location = e. location ( extern_url, extern_url_takes_precedence, dst, tcx) ;
158+ cx. cache . extern_locations . insert ( e. crate_num , location) ;
159+ cx. cache . external_paths . insert ( e. def_id ( ) , ( vec ! [ name. to_string( ) ] , ItemType :: Module ) ) ;
159160 }
160161
161162 // FIXME: avoid this clone (requires implementing Default manually)
162- self . primitive_locations = PrimitiveType :: primitive_locations ( tcx) . clone ( ) ;
163- for ( prim, & def_id) in & self . primitive_locations {
163+ cx . cache . primitive_locations = PrimitiveType :: primitive_locations ( tcx) . clone ( ) ;
164+ for ( prim, & def_id) in & cx . cache . primitive_locations {
164165 let crate_name = tcx. crate_name ( def_id. krate ) ;
165166 // Recall that we only allow primitive modules to be at the root-level of the crate.
166167 // If that restriction is ever lifted, this will have to include the relative paths instead.
167- self . external_paths . insert (
168+ cx . cache . external_paths . insert (
168169 def_id,
169170 ( vec ! [ crate_name. to_string( ) , prim. as_sym( ) . to_string( ) ] , ItemType :: Primitive ) ,
170171 ) ;
171172 }
172173
173- krate = CacheBuilder { tcx, cache : self } . fold_crate ( krate) ;
174+ krate = CacheBuilder { tcx, cache : & mut cx . cache } . fold_crate ( krate) ;
174175
175- for ( trait_did, dids, impl_) in self . orphan_trait_impls . drain ( ..) {
176- if self . traits . contains_key ( & trait_did) {
176+ for ( trait_did, dids, impl_) in cx . cache . orphan_trait_impls . drain ( ..) {
177+ if cx . cache . traits . contains_key ( & trait_did) {
177178 for did in dids {
178- self . impls . entry ( did) . or_default ( ) . push ( impl_. clone ( ) ) ;
179+ cx . cache . impls . entry ( did) . or_default ( ) . push ( impl_. clone ( ) ) ;
179180 }
180181 }
181182 }
0 commit comments