@@ -13,7 +13,7 @@ use serde::Serialize;
1313
1414use super :: { collect_paths_for_type, ensure_trailing_slash, Context , BASIC_KEYWORDS } ;
1515use crate :: clean:: Crate ;
16- use crate :: config:: RenderOptions ;
16+ use crate :: config:: { EmitType , RenderOptions } ;
1717use crate :: docfs:: PathError ;
1818use crate :: error:: Error ;
1919use crate :: formats:: FormatRenderer ;
@@ -72,6 +72,18 @@ impl SharedResource<'_> {
7272 SharedResource :: CrateSpecific { basename } => cx. suffix_path ( basename) ,
7373 }
7474 }
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+ }
7587}
7688
7789impl Context < ' _ > {
@@ -86,16 +98,25 @@ impl Context<'_> {
8698 self . dst . join ( & filename)
8799 }
88100
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+ }
92112 }
93113
94114 fn write_minify (
95115 & self ,
96116 resource : SharedResource < ' _ > ,
97117 contents : & str ,
98118 minify : bool ,
119+ emit : & [ EmitType ] ,
99120 ) -> Result < ( ) , Error > {
100121 let tmp;
101122 let contents = if minify {
@@ -111,7 +132,7 @@ impl Context<'_> {
111132 contents. as_bytes ( )
112133 } ;
113134
114- self . write_shared ( resource, contents)
135+ self . write_shared ( resource, contents, emit )
115136 }
116137}
117138
@@ -133,10 +154,14 @@ pub(super) fn write_shared(
133154 SharedResource :: ToolchainSpecific { basename : p } ,
134155 c,
135156 options. enable_minification ,
157+ & options. emit ,
136158 )
137159 } ;
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 ) ;
140165
141166 // Add all the static files. These may already exist, but we just
142167 // overwrite them anyway to make sure that they're fresh and up-to-date.
@@ -214,7 +239,7 @@ pub(super) fn write_shared(
214239 }
215240 write_minify ( "normalize.css" , static_files:: NORMALIZE_CSS ) ?;
216241 for ( name, contents) in & * FILES_UNVERSIONED {
217- cx. write_shared ( SharedResource :: Unversioned { name } , contents) ?;
242+ cx. write_shared ( SharedResource :: Unversioned { name } , contents, & options . emit ) ?;
218243 }
219244
220245 fn collect ( path : & Path , krate : & str , key : & str ) -> io:: Result < ( Vec < String > , Vec < String > ) > {
@@ -354,7 +379,7 @@ pub(super) fn write_shared(
354379 "var N = null;var sourcesIndex = {{}};\n {}\n createSourceSidebar();\n " ,
355380 all_sources. join( "\n " )
356381 ) ;
357- cx . write_shared ( SharedResource :: CrateSpecific { basename : "source-files.js" } , v) ?;
382+ write_crate ( "source-files.js" , & v) ?;
358383 }
359384
360385 // Update the search index and crate list.
@@ -371,12 +396,12 @@ pub(super) fn write_shared(
371396 let mut v = String :: from ( "var searchIndex = JSON.parse('{\\ \n " ) ;
372397 v. push_str ( & all_indexes. join ( ",\\ \n " ) ) ;
373398 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) ?;
375400 }
376401
377402 let crate_list =
378403 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) ?;
380405
381406 if options. enable_index_page {
382407 if let Some ( index_page) = options. index_page . clone ( ) {
0 commit comments