@@ -13,7 +13,7 @@ use serde::Serialize;
13
13
14
14
use super :: { collect_paths_for_type, ensure_trailing_slash, Context , BASIC_KEYWORDS } ;
15
15
use crate :: clean:: Crate ;
16
- use crate :: config:: RenderOptions ;
16
+ use crate :: config:: { EmitType , RenderOptions } ;
17
17
use crate :: docfs:: PathError ;
18
18
use crate :: error:: Error ;
19
19
use crate :: formats:: FormatRenderer ;
@@ -72,6 +72,18 @@ impl SharedResource<'_> {
72
72
SharedResource :: CrateSpecific { basename } => cx. suffix_path ( basename) ,
73
73
}
74
74
}
75
+
76
+ fn should_emit ( & self , emit : & [ EmitType ] ) -> bool {
77
+ if emit. is_empty ( ) {
78
+ return true ;
79
+ }
80
+ let kind = match self {
81
+ SharedResource :: Unversioned { .. } => EmitType :: Unversioned ,
82
+ SharedResource :: ToolchainSpecific { .. } => EmitType :: Toolchain ,
83
+ SharedResource :: CrateSpecific { .. } => EmitType :: CrateSpecific ,
84
+ } ;
85
+ emit. contains ( & kind)
86
+ }
75
87
}
76
88
77
89
impl Context < ' _ > {
@@ -86,16 +98,25 @@ impl Context<'_> {
86
98
self . dst . join ( & filename)
87
99
}
88
100
89
- fn write_shared < C : AsRef < [ u8 ] > > ( & self , resource : SharedResource < ' _ > , contents : C ) -> Result < ( ) , Error >
90
- {
91
- self . shared . fs . write ( resource. path ( self ) , contents)
101
+ fn write_shared < C : AsRef < [ u8 ] > > (
102
+ & self ,
103
+ resource : SharedResource < ' _ > ,
104
+ contents : C ,
105
+ emit : & [ EmitType ] ,
106
+ ) -> Result < ( ) , Error > {
107
+ if resource. should_emit ( emit) {
108
+ self . shared . fs . write ( resource. path ( self ) , contents)
109
+ } else {
110
+ Ok ( ( ) )
111
+ }
92
112
}
93
113
94
114
fn write_minify (
95
115
& self ,
96
116
resource : SharedResource < ' _ > ,
97
117
contents : & str ,
98
118
minify : bool ,
119
+ emit : & [ EmitType ] ,
99
120
) -> Result < ( ) , Error > {
100
121
let tmp;
101
122
let contents = if minify {
@@ -111,7 +132,7 @@ impl Context<'_> {
111
132
contents. as_bytes ( )
112
133
} ;
113
134
114
- self . write_shared ( resource, contents)
135
+ self . write_shared ( resource, contents, emit )
115
136
}
116
137
}
117
138
@@ -133,10 +154,14 @@ pub(super) fn write_shared(
133
154
SharedResource :: ToolchainSpecific { basename : p } ,
134
155
c,
135
156
options. enable_minification ,
157
+ & options. emit ,
136
158
)
137
159
} ;
138
- let write_toolchain =
139
- |p : & _ , c : & _ | cx. write_shared ( SharedResource :: ToolchainSpecific { basename : p } , c) ;
160
+ let write_toolchain = |p : & _ , c : & _ | {
161
+ cx. write_shared ( SharedResource :: ToolchainSpecific { basename : p } , c, & options. emit )
162
+ } ;
163
+ let write_crate =
164
+ |p, c : & _ | cx. write_shared ( SharedResource :: CrateSpecific { basename : p } , c, & options. emit ) ;
140
165
141
166
// Add all the static files. These may already exist, but we just
142
167
// overwrite them anyway to make sure that they're fresh and up-to-date.
@@ -214,7 +239,7 @@ pub(super) fn write_shared(
214
239
}
215
240
write_minify ( "normalize.css" , static_files:: NORMALIZE_CSS ) ?;
216
241
for ( name, contents) in & * FILES_UNVERSIONED {
217
- cx. write_shared ( SharedResource :: Unversioned { name } , contents) ?;
242
+ cx. write_shared ( SharedResource :: Unversioned { name } , contents, & options . emit ) ?;
218
243
}
219
244
220
245
fn collect ( path : & Path , krate : & str , key : & str ) -> io:: Result < ( Vec < String > , Vec < String > ) > {
@@ -354,7 +379,7 @@ pub(super) fn write_shared(
354
379
"var N = null;var sourcesIndex = {{}};\n {}\n createSourceSidebar();\n " ,
355
380
all_sources. join( "\n " )
356
381
) ;
357
- cx . write_shared ( SharedResource :: CrateSpecific { basename : "source-files.js" } , v) ?;
382
+ write_crate ( "source-files.js" , & v) ?;
358
383
}
359
384
360
385
// Update the search index and crate list.
@@ -371,12 +396,12 @@ pub(super) fn write_shared(
371
396
let mut v = String :: from ( "var searchIndex = JSON.parse('{\\ \n " ) ;
372
397
v. push_str ( & all_indexes. join ( ",\\ \n " ) ) ;
373
398
v. push_str ( "\\ \n }');\n initSearch(searchIndex);" ) ;
374
- cx . write_shared ( SharedResource :: CrateSpecific { basename : "search-index.js" } , v) ?;
399
+ write_crate ( "search-index.js" , & v) ?;
375
400
}
376
401
377
402
let crate_list =
378
403
format ! ( "window.ALL_CRATES = [{}];" , krates. iter( ) . map( |k| format!( "\" {}\" " , k) ) . join( "," ) ) ;
379
- cx . write_shared ( SharedResource :: CrateSpecific { basename : "crates.js" } , crate_list) ?;
404
+ write_crate ( "crates.js" , & crate_list) ?;
380
405
381
406
if options. enable_index_page {
382
407
if let Some ( index_page) = options. index_page . clone ( ) {
0 commit comments