diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2021-12-23 00:28:55 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-23 00:28:55 +0100 |
| commit | 051d91a5ce6c6a7fa2f4759a4df546254fb5cccc (patch) | |
| tree | db7a24a4ac690d11aab68c27f05007218f8ed114 | |
| parent | 12e4907728eeeb658c1a8d528dbacab9ad485d25 (diff) | |
| parent | b7de7973b221acb2ce900a04c11320a16fc884fb (diff) | |
| download | rust-051d91a5ce6c6a7fa2f4759a4df546254fb5cccc.tar.gz rust-051d91a5ce6c6a7fa2f4759a4df546254fb5cccc.zip | |
Rollup merge of #92146 - willcrichton:example-analyzer, r=jyn514
Don't emit shared files when scraping examples from dependencies in Rustdoc This PR fixes #91605. The issue is that `Context::init` gets called when scraping dependencies. By default, just calling `init` calls into `write_shared` and `build_index` which register the scraped crate into a list that later gets used for the Rustdoc sidebar. The fix is to ensure that `write_shared` is not called when scraping. r? `@jyn514`
| -rw-r--r-- | src/librustdoc/config.rs | 4 | ||||
| -rw-r--r-- | src/librustdoc/html/render/context.rs | 16 | ||||
| -rw-r--r-- | src/librustdoc/scrape_examples.rs | 3 |
3 files changed, 16 insertions, 7 deletions
diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 961a98a7205..d300afa3132 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -272,7 +272,10 @@ crate struct RenderOptions { crate emit: Vec<EmitType>, /// If `true`, HTML source pages will generate links for items to their definition. crate generate_link_to_definition: bool, + /// Set of function-call locations to include as examples crate call_locations: AllCallLocations, + /// If `true`, Context::init will not emit shared files. + crate no_emit_shared: bool, } #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -732,6 +735,7 @@ impl Options { emit, generate_link_to_definition, call_locations, + no_emit_shared: false, }, crate_name, output_format, diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 9c849b7789a..45a436c4487 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -397,6 +397,7 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { show_type_layout, generate_link_to_definition, call_locations, + no_emit_shared, .. } = options; @@ -516,13 +517,16 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { sources::render(&mut cx, &krate)?; } - // Build our search index - let index = build_index(&krate, &mut Rc::get_mut(&mut cx.shared).unwrap().cache, tcx); + if !no_emit_shared { + // Build our search index + let index = build_index(&krate, &mut Rc::get_mut(&mut cx.shared).unwrap().cache, tcx); + + // Write shared runs within a flock; disable thread dispatching of IO temporarily. + Rc::get_mut(&mut cx.shared).unwrap().fs.set_sync_only(true); + write_shared(&cx, &krate, index, &md_opts)?; + Rc::get_mut(&mut cx.shared).unwrap().fs.set_sync_only(false); + } - // Write shared runs within a flock; disable thread dispatching of IO temporarily. - Rc::get_mut(&mut cx.shared).unwrap().fs.set_sync_only(true); - write_shared(&cx, &krate, index, &md_opts)?; - Rc::get_mut(&mut cx.shared).unwrap().fs.set_sync_only(false); Ok((cx, krate)) } diff --git a/src/librustdoc/scrape_examples.rs b/src/librustdoc/scrape_examples.rs index 10b6fdf87f4..6809551fcfd 100644 --- a/src/librustdoc/scrape_examples.rs +++ b/src/librustdoc/scrape_examples.rs @@ -223,13 +223,14 @@ where crate fn run( krate: clean::Crate, - renderopts: config::RenderOptions, + mut renderopts: config::RenderOptions, cache: formats::cache::Cache, tcx: TyCtxt<'_>, options: ScrapeExamplesOptions, ) -> interface::Result<()> { let inner = move || -> Result<(), String> { // Generates source files for examples + renderopts.no_emit_shared = true; let (cx, _) = Context::init(krate, renderopts, cache, tcx).map_err(|e| e.to_string())?; // Collect CrateIds corresponding to provided target crates |
