@@ -6,8 +6,8 @@ use rustc_middle::middle::privacy::AccessLevels;
6
6
use rustc_middle:: ty:: TyCtxt ;
7
7
use rustc_span:: symbol:: sym;
8
8
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 ;
11
11
use crate :: fold:: DocFolder ;
12
12
use crate :: formats:: item_type:: ItemType ;
13
13
use crate :: formats:: Impl ;
@@ -136,46 +136,47 @@ impl Cache {
136
136
137
137
/// Populates the `Cache` with more data. The returned `Crate` will be missing some data that was
138
138
/// 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
+
145
142
// 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 ( ) ;
149
145
150
146
// Cache where all our extern crates are located
151
147
// 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
+
153
151
let name = e. name ( tcx) ;
152
+ let render_options = & cx. render_options ;
154
153
let extern_url =
155
154
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 ) ) ;
159
160
}
160
161
161
162
// 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 {
164
165
let crate_name = tcx. crate_name ( def_id. krate ) ;
165
166
// Recall that we only allow primitive modules to be at the root-level of the crate.
166
167
// 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 (
168
169
def_id,
169
170
( vec ! [ crate_name. to_string( ) , prim. as_sym( ) . to_string( ) ] , ItemType :: Primitive ) ,
170
171
) ;
171
172
}
172
173
173
- krate = CacheBuilder { tcx, cache : self } . fold_crate ( krate) ;
174
+ krate = CacheBuilder { tcx, cache : & mut cx . cache } . fold_crate ( krate) ;
174
175
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) {
177
178
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 ( ) ) ;
179
180
}
180
181
}
181
182
}
0 commit comments