@@ -20,7 +20,7 @@ use super::{collect_spans_and_sources, scrape_examples_help, AllTypes, LinkFromS
2020use  crate :: clean:: types:: ExternalLocation ; 
2121use  crate :: clean:: utils:: has_doc_flag; 
2222use  crate :: clean:: { self ,  ExternalCrate } ; 
23- use  crate :: config:: { ModuleSorting ,  RenderOptions } ; 
23+ use  crate :: config:: { ModuleSorting ,  RenderOptions ,   ShouldMerge } ; 
2424use  crate :: docfs:: { DocFS ,  PathError } ; 
2525use  crate :: error:: Error ; 
2626use  crate :: formats:: cache:: Cache ; 
@@ -127,8 +127,10 @@ pub(crate) struct SharedContext<'tcx> {
127127     pub ( crate )  span_correspondence_map :  FxHashMap < rustc_span:: Span ,  LinkFromSrc > , 
128128    /// The [`Cache`] used during rendering. 
129129     pub ( crate )  cache :  Cache , 
130- 
131130    pub ( crate )  call_locations :  AllCallLocations , 
131+     /// Controls whether we read / write to cci files in the doc root. Defaults read=true, 
132+      /// write=true 
133+      should_merge :  ShouldMerge , 
132134} 
133135
134136impl  SharedContext < ' _ >  { 
@@ -550,6 +552,7 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> {
550552            span_correspondence_map :  matches, 
551553            cache, 
552554            call_locations, 
555+             should_merge :  options. should_merge , 
553556        } ; 
554557
555558        let  dst = output; 
@@ -637,92 +640,96 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> {
637640        ) ; 
638641        shared. fs . write ( final_file,  v) ?; 
639642
640-         // Generating settings page. 
641-         page. title  = "Settings" ; 
642-         page. description  = "Settings of Rustdoc" ; 
643-         page. root_path  = "./" ; 
644-         page. rust_logo  = true ; 
643+         // if to avoid writing help, settings files to doc root unless we're on the final invocation 
644+         if  shared. should_merge . write_rendered_cci  { 
645+             // Generating settings page. 
646+             page. title  = "Settings" ; 
647+             page. description  = "Settings of Rustdoc" ; 
648+             page. root_path  = "./" ; 
649+             page. rust_logo  = true ; 
645650
646-         let  sidebar = "<h2 class=\" location\" >Settings</h2><div class=\" sidebar-elems\" ></div>" ; 
647-         let  v = layout:: render ( 
648-             & shared. layout , 
649-             & page, 
650-             sidebar, 
651-             |buf :  & mut  Buffer | { 
652-                 write ! ( 
653-                     buf, 
654-                     "<div class=\" main-heading\" >\  
655-                       <h1>Rustdoc settings</h1>\ 
656-                       <span class=\" out-of-band\" >\ 
657-                           <a id=\" back\"  href=\" javascript:void(0)\"  onclick=\" history.back();\" >\ 
658-                              Back\ 
659-                          </a>\ 
660-                       </span>\ 
661-                       </div>\ 
662-                       <noscript>\ 
663-                          <section>\ 
664-                              You need to enable JavaScript be able to update your settings.\ 
665-                          </section>\ 
666-                       </noscript>\ 
667-                       <script defer src=\" {static_root_path}{settings_js}\" ></script>", 
668-                     static_root_path = page. get_static_root_path( ) , 
669-                     settings_js = static_files:: STATIC_FILES . settings_js, 
670-                 ) ; 
671-                 // Pre-load all theme CSS files, so that switching feels seamless. 
672-                 // 
673-                 // When loading settings.html as a popover, the equivalent HTML is 
674-                 // generated in main.js. 
675-                 for  file in  & shared. style_files  { 
676-                     if  let  Ok ( theme)  = file. basename ( )  { 
677-                         write ! ( 
678-                             buf, 
679-                             "<link rel=\" preload\"  href=\" {root_path}{theme}{suffix}.css\"  \  
680-                                  as=\" style\" >", 
681-                             root_path = page. static_root_path. unwrap_or( "" ) , 
682-                             suffix = page. resource_suffix, 
683-                         ) ; 
651+             let  sidebar = "<h2 class=\" location\" >Settings</h2><div class=\" sidebar-elems\" ></div>" ; 
652+             let  v = layout:: render ( 
653+                 & shared. layout , 
654+                 & page, 
655+                 sidebar, 
656+                 |buf :  & mut  Buffer | { 
657+                     write ! ( 
658+                         buf, 
659+                         "<div class=\" main-heading\" >\  
660+                           <h1>Rustdoc settings</h1>\ 
661+                           <span class=\" out-of-band\" >\ 
662+                               <a id=\" back\"  href=\" javascript:void(0)\"  onclick=\" history.back();\" >\ 
663+                                  Back\ 
664+                              </a>\ 
665+                           </span>\ 
666+                           </div>\ 
667+                           <noscript>\ 
668+                              <section>\ 
669+                                  You need to enable JavaScript be able to update your settings.\ 
670+                              </section>\ 
671+                           </noscript>\ 
672+                           <script defer src=\" {static_root_path}{settings_js}\" ></script>", 
673+                         static_root_path = page. get_static_root_path( ) , 
674+                         settings_js = static_files:: STATIC_FILES . settings_js, 
675+                     ) ; 
676+                     // Pre-load all theme CSS files, so that switching feels seamless. 
677+                     // 
678+                     // When loading settings.html as a popover, the equivalent HTML is 
679+                     // generated in main.js. 
680+                     for  file in  & shared. style_files  { 
681+                         if  let  Ok ( theme)  = file. basename ( )  { 
682+                             write ! ( 
683+                                 buf, 
684+                                 "<link rel=\" preload\"  href=\" {root_path}{theme}{suffix}.css\"  \  
685+                                      as=\" style\" >", 
686+                                 root_path = page. static_root_path. unwrap_or( "" ) , 
687+                                 suffix = page. resource_suffix, 
688+                             ) ; 
689+                         } 
684690                    } 
685-                 } 
686-             } , 
687-             & shared. style_files , 
688-         ) ; 
689-         shared. fs . write ( settings_file,  v) ?; 
691+                 } , 
692+                 & shared. style_files , 
693+             ) ; 
694+             shared. fs . write ( settings_file,  v) ?; 
690695
691-         // Generating help page. 
692-         page. title  = "Help" ; 
693-         page. description  = "Documentation for Rustdoc" ; 
694-         page. root_path  = "./" ; 
695-         page. rust_logo  = true ; 
696+              // Generating help page. 
697+              page. title  = "Help" ; 
698+              page. description  = "Documentation for Rustdoc" ; 
699+              page. root_path  = "./" ; 
700+              page. rust_logo  = true ; 
696701
697-         let  sidebar = "<h2 class=\" location\" >Help</h2><div class=\" sidebar-elems\" ></div>" ; 
698-         let  v = layout:: render ( 
699-             & shared. layout , 
700-             & page, 
701-             sidebar, 
702-             |buf :  & mut  Buffer | { 
703-                 write ! ( 
704-                     buf, 
705-                     "<div class=\" main-heading\" >\  
706-                       <h1>Rustdoc help</h1>\ 
707-                       <span class=\" out-of-band\" >\ 
708-                           <a id=\" back\"  href=\" javascript:void(0)\"  onclick=\" history.back();\" >\ 
709-                              Back\ 
710-                          </a>\ 
711-                       </span>\ 
712-                       </div>\ 
713-                       <noscript>\ 
714-                          <section>\ 
715-                              <p>You need to enable JavaScript to use keyboard commands or search.</p>\ 
716-                              <p>For more information, browse the <a href=\" https://doc.rust-lang.org/rustdoc/\" >rustdoc handbook</a>.</p>\ 
717-                          </section>\ 
718-                       </noscript>", 
719-                 ) 
720-             } , 
721-             & shared. style_files , 
722-         ) ; 
723-         shared. fs . write ( help_file,  v) ?; 
702+             let  sidebar = "<h2 class=\" location\" >Help</h2><div class=\" sidebar-elems\" ></div>" ; 
703+             let  v = layout:: render ( 
704+                 & shared. layout , 
705+                 & page, 
706+                 sidebar, 
707+                 |buf :  & mut  Buffer | { 
708+                     write ! ( 
709+                         buf, 
710+                         "<div class=\" main-heading\" >\  
711+                           <h1>Rustdoc help</h1>\ 
712+                           <span class=\" out-of-band\" >\ 
713+                               <a id=\" back\"  href=\" javascript:void(0)\"  onclick=\" history.back();\" >\ 
714+                                  Back\ 
715+                              </a>\ 
716+                           </span>\ 
717+                           </div>\ 
718+                           <noscript>\ 
719+                              <section>\ 
720+                                  <p>You need to enable JavaScript to use keyboard commands or search.</p>\ 
721+                                  <p>For more information, browse the <a href=\" https://doc.rust-lang.org/rustdoc/\" >rustdoc handbook</a>.</p>\ 
722+                              </section>\ 
723+                           </noscript>", 
724+                     ) 
725+                 } , 
726+                 & shared. style_files , 
727+             ) ; 
728+             shared. fs . write ( help_file,  v) ?; 
729+         } 
724730
725-         if  shared. layout . scrape_examples_extension  { 
731+         // if to avoid writing files to doc root unless we're on the final invocation 
732+         if  shared. layout . scrape_examples_extension  && shared. should_merge . write_rendered_cci  { 
726733            page. title  = "About scraped examples" ; 
727734            page. description  = "How the scraped examples feature works in Rustdoc" ; 
728735            let  v = layout:: render ( 
0 commit comments