@@ -8,6 +8,7 @@ use rustc_span::symbol::sym;
8
8
9
9
use crate :: clean:: { self , ItemId , PrimitiveType } ;
10
10
use crate :: config:: RenderOptions ;
11
+ use crate :: core:: DocContext ;
11
12
use crate :: fold:: DocFolder ;
12
13
use crate :: formats:: item_type:: ItemType ;
13
14
use crate :: formats:: Impl ;
@@ -136,15 +137,13 @@ impl Cache {
136
137
137
138
/// Populates the `Cache` with more data. The returned `Crate` will be missing some data that was
138
139
/// 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 {
140
+ crate fn populate ( cx : & mut DocContext < ' _ > , mut krate : clean:: Crate ) -> clean:: Crate {
141
+ let tcx = cx. tcx ;
142
+ let render_options = & cx. render_options ;
143
+
145
144
// Crawl the crate to build various caches used for the output
146
- debug ! ( ?self . crate_version) ;
147
- self . traits = krate. external_traits . take ( ) ;
145
+ debug ! ( ?cx . cache . crate_version) ;
146
+ cx . cache . traits = krate. external_traits . take ( ) ;
148
147
let RenderOptions { extern_html_root_takes_precedence, output : dst, .. } = render_options;
149
148
150
149
// Cache where all our extern crates are located
@@ -154,28 +153,28 @@ impl Cache {
154
153
let extern_url =
155
154
render_options. extern_html_root_urls . get ( & * name. as_str ( ) ) . map ( |u| & * * u) ;
156
155
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 ) ) ;
156
+ cx . cache . extern_locations . insert ( e. crate_num , location) ;
157
+ cx . cache . external_paths . insert ( e. def_id ( ) , ( vec ! [ name. to_string( ) ] , ItemType :: Module ) ) ;
159
158
}
160
159
161
160
// 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 {
161
+ cx . cache . primitive_locations = PrimitiveType :: primitive_locations ( tcx) . clone ( ) ;
162
+ for ( prim, & def_id) in & cx . cache . primitive_locations {
164
163
let crate_name = tcx. crate_name ( def_id. krate ) ;
165
164
// Recall that we only allow primitive modules to be at the root-level of the crate.
166
165
// If that restriction is ever lifted, this will have to include the relative paths instead.
167
- self . external_paths . insert (
166
+ cx . cache . external_paths . insert (
168
167
def_id,
169
168
( vec ! [ crate_name. to_string( ) , prim. as_sym( ) . to_string( ) ] , ItemType :: Primitive ) ,
170
169
) ;
171
170
}
172
171
173
- krate = CacheBuilder { tcx, cache : self } . fold_crate ( krate) ;
172
+ krate = CacheBuilder { tcx, cache : & mut cx . cache } . fold_crate ( krate) ;
174
173
175
- for ( trait_did, dids, impl_) in self . orphan_trait_impls . drain ( ..) {
176
- if self . traits . contains_key ( & trait_did) {
174
+ for ( trait_did, dids, impl_) in cx . cache . orphan_trait_impls . drain ( ..) {
175
+ if cx . cache . traits . contains_key ( & trait_did) {
177
176
for did in dids {
178
- self . impls . entry ( did) . or_default ( ) . push ( impl_. clone ( ) ) ;
177
+ cx . cache . impls . entry ( did) . or_default ( ) . push ( impl_. clone ( ) ) ;
179
178
}
180
179
}
181
180
}
0 commit comments