From 91131bb0ca52b0f3fb13ef8ccdf17e3a58b240f6 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 17 Jul 2026 15:13:23 -0700 Subject: [PATCH 01/12] rustdoc: fix `--enable-index-page` with finalize --- src/librustdoc/html/render/write_shared.rs | 58 +++++++++++---------- src/librustdoc/lib.rs | 60 +++++++++++++++++----- 2 files changed, 78 insertions(+), 40 deletions(-) diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index 56059c6619954..69a1cbaf2874f 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -111,28 +111,9 @@ pub(crate) fn write_shared( cx.shared.layout.css_file_extension.as_deref(), &cx.shared.resource_suffix, cx.info.include_sources, + &cx.shared.layout, + cx.shared.tcx, )?; - match &opt.index_page { - Some(index_page) if opt.enable_index_page => { - let mut md_opts = opt.clone(); - md_opts.output = cx.dst.clone(); - md_opts.external_html = cx.shared.layout.external_html.clone(); - let file = try_err!(cx.sess().source_map().load_file(&index_page), &index_page); - try_err!( - crate::markdown::render_and_write(file, md_opts, cx.shared.edition()), - &index_page - ); - } - None if opt.enable_index_page => { - write_rendered_cci::( - || CratesIndexPart::blank(cx), - &cx.dst, - &crates, - &opt.should_merge, - )?; - } - _ => {} // they don't want an index page - } } cx.shared.fs.set_sync_only(false); @@ -150,9 +131,32 @@ pub(crate) fn write_not_crate_specific( css_file_extension: Option<&Path>, resource_suffix: &str, include_sources: bool, + layout: &layout::Layout, + tcx: TyCtxt<'_>, ) -> Result<(), Error> { write_rendered_cross_crate_info(crates, dst, opt, include_sources, resource_suffix)?; write_resources(dst, opt, style_files, css_file_extension, resource_suffix)?; + match &opt.index_page { + Some(index_page) if opt.enable_index_page => { + let mut md_opts = opt.clone(); + md_opts.output = dst.to_path_buf(); + md_opts.external_html = layout.external_html.clone(); + let file = try_err!(tcx.sess.source_map().load_file(&index_page), &index_page); + try_err!( + crate::markdown::render_and_write(file, md_opts, tcx.sess.edition()), + &index_page + ); + } + None if opt.enable_index_page => { + write_rendered_cci::( + || CratesIndexPart::blank(layout, opt, style_files), + &dst, + &crates, + &opt.should_merge, + )?; + } + _ => {} // they don't want an index page + } Ok(()) } @@ -399,19 +403,21 @@ impl CciPart for CratesIndexPart { } impl CratesIndexPart { - fn blank(cx: &Context<'_>) -> SortedTemplate<::FileFormat> { + fn blank( + layout: &layout::Layout, + opt: &RenderOptions, + style_files: &[StylePath], + ) -> SortedTemplate<::FileFormat> { let page = layout::Page { title: "Index of crates", short_title: "Crates", css_class: "mod sys", root_path: "./", - static_root_path: cx.shared.static_root_path.as_deref(), + static_root_path: opt.static_root_path.as_deref(), description: "List of crates", - resource_suffix: &cx.shared.resource_suffix, + resource_suffix: &opt.resource_suffix, rust_logo: true, }; - let layout = &cx.shared.layout; - let style_files = &cx.shared.style_files; const DELIMITER: &str = "\u{FFFC}"; // users are being naughty if they have this let content = format_args!( "
\ diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index be830cad6c735..321cafb8f434f 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -77,7 +77,7 @@ use rustc_errors::DiagCtxtHandle; use rustc_hir::def_id::LOCAL_CRATE; use rustc_interface::interface; use rustc_middle::ty::TyCtxt; -use rustc_session::config::{ErrorOutputType, RustcOptGroup, make_crate_type_option}; +use rustc_session::config::{ErrorOutputType, Input, RustcOptGroup, make_crate_type_option}; use rustc_session::{EarlyDiagCtxt, getopts}; use rustc_span::{BytePos, Span, SyntaxContext}; use tracing::info; @@ -772,7 +772,10 @@ fn run_renderer< /// Renders and writes cross-crate info files, like the search index. This function exists so that /// we can run rustdoc without a crate root in the `--merge=finalize` mode. Cross-crate info files /// discovered via `--read-doc-meta-dir` are combined and written to the doc root. -fn run_merge_finalize(opt: config::RenderOptions) -> Result<(), error::Error> { +fn run_merge_finalize( + opt: config::RenderOptions, + compiler: &interface::Compiler, +) -> Result<(), error::Error> { assert!( opt.should_merge.write_rendered_cci, "config.rs only allows us to return InputMode::NoInputMergeFinalize if --merge=finalize" @@ -783,16 +786,37 @@ fn run_merge_finalize(opt: config::RenderOptions) -> Result<(), error::Error> { ); let crates = html::render::CrateInfo::read_many(&opt.include_parts_dir)?; let include_sources = !opt.html_no_source; - html::render::write_not_crate_specific( - &crates, - &opt.output, - &opt, - &opt.themes, - opt.extension_css.as_deref(), - &opt.resource_suffix, - include_sources, - )?; - Ok(()) + + let krate = ast::Crate { + attrs: Default::default(), + items: Default::default(), + spans: Default::default(), + id: ast::DUMMY_NODE_ID, + is_placeholder: false, + }; + rustc_interface::create_and_enter_global_ctxt(compiler, krate, |tcx| { + html::render::write_not_crate_specific( + &crates, + &opt.output, + &opt, + &opt.themes, + opt.extension_css.as_deref(), + &opt.resource_suffix, + include_sources, + &crate::html::layout::Layout { + logo: String::new(), + favicon: String::new(), + external_html: opt.external_html.clone(), + default_settings: opt.default_settings.clone(), + krate: String::new(), + krate_version: String::new(), + css_file_extension: opt.extension_css.clone(), + scrape_examples_extension: false, + }, + tcx, + )?; + Ok(()) + }) } fn main_args(early_dcx: &mut EarlyDiagCtxt, at_args: &[String]) { @@ -834,10 +858,18 @@ fn main_args(early_dcx: &mut EarlyDiagCtxt, at_args: &[String]) { let input = match input { config::InputMode::HasFile(input) => input, config::InputMode::NoInputMergeFinalize => { + let config = core::create_config( + Input::Str { + name: rustc_span::FileName::Custom(String::new()), + input: String::new(), + }, + options, + &render_options, + ); return wrap_return( dcx, - rustc_span::create_session_globals_then(options.edition, &[], None, || { - run_merge_finalize(render_options) + interface::run_compiler(config, |compiler| { + run_merge_finalize(render_options, compiler) .map_err(|e| format!("could not write merged cross-crate info: {e}")) }), ); From a36c898d0570a4336dd00dbd91015ef8b77e2635 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 17 Jul 2026 12:42:42 -0700 Subject: [PATCH 02/12] rustdoc: move CCI tests to run-make Since we're getting rid of the ability to do finalize and document at the same time, we can't actually do this in the rustdoc-html test build system and need to do it this way instead. --- .../quebec.rs | 0 .../sierra.rs | 0 .../tango.rs | 0 .../indigo.rs | 0 .../quebec.rs | 0 .../romeo.rs | 0 .../sierra.rs | 0 .../tango.rs | 0 .../rustdoc-merge-cross-crate-info-no-merge-separate}/quebec.rs | 0 .../rustdoc-merge-cross-crate-info-no-merge-separate}/sierra.rs | 0 .../rustdoc-merge-cross-crate-info-no-merge-separate}/tango.rs | 0 .../quebec.rs | 0 .../sierra.rs | 0 .../tango.rs | 0 .../quebec.rs | 0 .../sierra.rs | 0 .../tango.rs | 0 .../quebec.rs | 0 .../sierra.rs | 0 .../tango.rs | 0 .../rustdoc-merge-cross-crate-info-overwrite}/quebec.rs | 0 .../rustdoc-merge-cross-crate-info-overwrite}/sierra.rs | 0 .../rustdoc-merge-cross-crate-info-overwrite}/tango.rs | 0 .../quebec.rs | 0 .../quebec.rs | 0 .../quebec.rs | 0 .../quebec.rs | 0 .../sierra.rs | 0 .../tango.rs | 0 .../quebec.rs | 0 .../sierra.rs | 0 .../tango.rs | 0 .../rustdoc-merge-cross-crate-info-transitive-no-info}/quebec.rs | 0 .../rustdoc-merge-cross-crate-info-transitive-no-info}/sierra.rs | 0 .../rustdoc-merge-cross-crate-info-transitive-no-info}/tango.rs | 0 .../rustdoc-merge-cross-crate-info-two-separate-out-dir}/echo.rs | 0 .../foxtrot.rs | 0 37 files changed, 0 insertions(+), 0 deletions(-) rename tests/{rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary => run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write => run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary => run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs => run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs}/indigo.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary => run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary => run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs}/romeo.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary => run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary => run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary => run-make/rustdoc-merge-cross-crate-info-no-merge-separate}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/no-merge-separate => run-make/rustdoc-merge-cross-crate-info-no-merge-separate}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary => run-make/rustdoc-merge-cross-crate-info-no-merge-separate}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary => run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/no-merge-write-anyway => run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary => run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary => run-make/rustdoc-merge-cross-crate-info-overwrite-but-include}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite-but-include => run-make/rustdoc-merge-cross-crate-info-overwrite-but-include}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary => run-make/rustdoc-merge-cross-crate-info-overwrite-but-include}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary => run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite-but-separate => run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary => run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite/auxiliary => run-make/rustdoc-merge-cross-crate-info-overwrite}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite => run-make/rustdoc-merge-cross-crate-info-overwrite}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/overwrite/auxiliary => run-make/rustdoc-merge-cross-crate-info-overwrite}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/single-crate-finalize => run-make/rustdoc-merge-cross-crate-info-single-crate-finalize}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/single-crate-read-write => run-make/rustdoc-merge-cross-crate-info-single-crate-read-write}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/single-crate-write-anyway => run-make/rustdoc-merge-cross-crate-info-single-crate-write-anyway}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary => run-make/rustdoc-merge-cross-crate-info-transitive-merge-none}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-merge-none => run-make/rustdoc-merge-cross-crate-info-transitive-merge-none}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary => run-make/rustdoc-merge-cross-crate-info-transitive-merge-none}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary => run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-merge-read-write => run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary => run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary => run-make/rustdoc-merge-cross-crate-info-transitive-no-info}/quebec.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-no-info => run-make/rustdoc-merge-cross-crate-info-transitive-no-info}/sierra.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary => run-make/rustdoc-merge-cross-crate-info-transitive-no-info}/tango.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/two-separate-out-dir => run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir}/echo.rs (100%) rename tests/{rustdoc-html/merge-cross-crate-info/two-separate-out-dir/auxiliary => run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir}/foxtrot.rs (100%) diff --git a/tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/romeo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/romeo.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/overwrite/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/single-crate-finalize/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/single-crate-finalize/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/single-crate-read-write/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/single-crate-read-write/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/single-crate-write-anyway/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-write-anyway/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/single-crate-write-anyway/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-single-crate-write-anyway/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary/quebec.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/sierra.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary/tango.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/two-separate-out-dir/echo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/two-separate-out-dir/echo.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs diff --git a/tests/rustdoc-html/merge-cross-crate-info/two-separate-out-dir/auxiliary/foxtrot.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs similarity index 100% rename from tests/rustdoc-html/merge-cross-crate-info/two-separate-out-dir/auxiliary/foxtrot.rs rename to tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs From 6887d4d453cf5e61430a021898326f5689f26411 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 17 Jul 2026 15:12:37 -0700 Subject: [PATCH 03/12] rustdoc: write `rmake` scripts to test CCI --- .../rmake.rs | 59 +++++++++++ .../rmake.rs | 99 +++++++++++++++++++ .../rmake.rs | 51 ++++++++++ .../rmake.rs | 48 +++++++++ .../rmake.rs | 57 +++++++++++ .../rmake.rs | 58 +++++++++++ .../rmake.rs | 54 ++++++++++ .../rmake.rs | 27 +++++ .../rmake.rs | 17 ++++ .../quebec.rs | 13 --- .../rmake.rs | 58 +++++++++++ .../rmake.rs | 48 +++++++++ .../rmake.rs | 48 +++++++++ .../rmake.rs | 41 ++++++++ 14 files changed, 665 insertions(+), 13 deletions(-) create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs delete mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-single-crate-write-anyway/quebec.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs create mode 100644 tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs new file mode 100644 index 0000000000000..bafd625dbc8b2 --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs @@ -0,0 +1,59 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display())) + .run(); + assert!(parts_out_dir.join("quebec.json").exists()); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display())) + .run(); + assert!(parts_out_dir.join("tango.json").exists()); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display())) + .run(); + assert!(parts_out_dir.join("sierra.json").exists()); + + let output = rustdoc() + .arg("-Zunstable-options") + .out_dir(&out_dir) + .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) + .arg("--enable-index-page") + .run(); + output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs new file mode 100644 index 0000000000000..d92ac11b56c58 --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs @@ -0,0 +1,99 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir("quebec-out") + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/quebec")) + .arg("--enable-index-page") + .run(); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir("tango-out") + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/tango")) + .arg("--enable-index-page") + .run(); + + rustc() + .input("sierra.rs") + .crate_name("sierra") + .crate_type("rlib") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .run(); + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir("sierra-out") + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/sierra")) + .arg("--enable-index-page") + .run(); + + rustc() + .input("romeo.rs") + .crate_name("romeo") + .crate_type("rlib") + .extern_("sierra", rust_lib_name("sierra")) + .library_search_path(cwd()) + .run(); + rustdoc() + .input("romeo.rs") + .crate_name("romeo") + .extern_("sierra", rust_lib_name("sierra")) + .library_search_path(cwd()) + .out_dir("romeo-out") + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/romeo")) + .arg("--enable-index-page") + .run(); + + rustdoc() + .input("indigo.rs") + .crate_name("indigo") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/indigo")) + .arg("--enable-index-page") + .run(); + + let output = rustdoc() + .arg("-Zunstable-options") + .out_dir(&out_dir) + .arg("--read-doc-meta-dir=info/doc.parts/tango") + .arg("--read-doc-meta-dir=info/doc.parts/romeo") + .arg("--read-doc-meta-dir=info/doc.parts/quebec") + .arg("--read-doc-meta-dir=info/doc.parts/sierra") + .arg("--read-doc-meta-dir=info/doc.parts/indigo") + .arg("--enable-index-page") + .run(); + output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); + htmldocck().arg(&out_dir).arg("indigo.rs").run(); + htmldocck().arg(&out_dir).arg("romeo.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs new file mode 100644 index 0000000000000..d996fecc94160 --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs @@ -0,0 +1,51 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display())) + .run(); + assert!(parts_out_dir.join("quebec.json").exists()); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display())) + .run(); + assert!(parts_out_dir.join("tango.json").exists()); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display())) + .run(); + assert!(parts_out_dir.join("sierra.json").exists()); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs new file mode 100644 index 0000000000000..7618e0c711fd5 --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs @@ -0,0 +1,48 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rfs, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=parts-wrong") + .run(); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=parts-wrong") + .run(); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=parts-wrong") + .run(); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs new file mode 100644 index 0000000000000..e15e6dab4f82d --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs @@ -0,0 +1,57 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/quebec")) + .run(); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/tango")) + .run(); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/sierra")) + .run(); + + let output = rustdoc() + .arg("-Zunstable-options") + .out_dir(&out_dir) + .arg(format!("--read-doc-meta-dir=info/doc.parts/tango")) + .arg(format!("--read-doc-meta-dir=info/doc.parts/sierra")) + .arg("--enable-index-page") + .run(); + output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs new file mode 100644 index 0000000000000..ae0b55dc8d2de --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs @@ -0,0 +1,58 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/quebec")) + .run(); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/tango")) + .run(); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/sierra")) + .run(); + + let output = rustdoc() + .arg("-Zunstable-options") + .out_dir(&out_dir) + .arg(format!("--read-doc-meta-dir=info/doc.parts/tango")) + .arg(format!("--read-doc-meta-dir=info/doc.parts/quebec")) + .arg(format!("--read-doc-meta-dir=info/doc.parts/sierra")) + .arg("--enable-index-page") + .run(); + output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs new file mode 100644 index 0000000000000..c99c1c2f8e623 --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs @@ -0,0 +1,54 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts/quebec.d")) + .run(); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir=info/doc.parts")) + .run(); + + let output = rustdoc() + .arg("-Zunstable-options") + .out_dir(&out_dir) + .arg(format!("--read-doc-meta-dir=info/doc.parts")) + .arg("--enable-index-page") + .run(); + output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .run(); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs new file mode 100644 index 0000000000000..18a1e3fe78a6c --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs @@ -0,0 +1,27 @@ +//@ needs-target-std + +use run_make_support::{htmldocck, path, rustc, rustdoc}; + +fn main() { + let parts_out_dir = path("parts"); + let out_dir = path("out"); + + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display())) + .run(); + assert!(parts_out_dir.join("quebec.json").exists()); + + let output = rustdoc() + .arg("-Zunstable-options") + .out_dir(&out_dir) + .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) + .arg("--enable-index-page") + .run(); + output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); + + htmldocck().arg(&out_dir).arg("quebec.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs new file mode 100644 index 0000000000000..f1f3fb4ae3e3d --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs @@ -0,0 +1,17 @@ +//@ needs-target-std + +use run_make_support::{htmldocck, path, rustc, rustdoc}; + +fn main() { + let out_dir = path("out"); + + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--enable-index-page") + .run(); + + htmldocck().arg(&out_dir).arg("quebec.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-write-anyway/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-write-anyway/quebec.rs deleted file mode 100644 index fde3635e62250..0000000000000 --- a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-write-anyway/quebec.rs +++ /dev/null @@ -1,13 +0,0 @@ -//@ doc-flags:--read-doc-meta-dir=. -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - -//@ has index.html -//@ has index.html '//h1' 'List of all crates' -//@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' -//@ has quebec/struct.Quebec.html -//@ hasraw search.index/name/*.js 'Quebec' - -// we can --write-doc-meta-dir, but that doesn't do anything other than create -// the file -pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs new file mode 100644 index 0000000000000..d61f7f3bb10d3 --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs @@ -0,0 +1,58 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=info/doc.parts/quebec") + .run(); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=info/doc.parts/tango") + .run(); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=info/doc.parts/sierra") + .run(); + + let output = rustdoc() + .arg("-Zunstable-options") + .out_dir(&out_dir) + .arg("--read-doc-meta-dir=info/doc.parts/tango") + .arg("--read-doc-meta-dir=info/doc.parts/quebec") + .arg("--read-doc-meta-dir=info/doc.parts/sierra") + .arg("--enable-index-page") + .run(); + output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs new file mode 100644 index 0000000000000..019d497da1c65 --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs @@ -0,0 +1,48 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--enable-index-page") + .run(); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--enable-index-page") + .run(); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--enable-index-page") + .run(); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs new file mode 100644 index 0000000000000..dcbc605be4629 --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs @@ -0,0 +1,48 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + + rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); + rustdoc() + .input("quebec.rs") + .crate_name("quebec") + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=info/doc.parts/quebec") + .run(); + + rustc() + .input("tango.rs") + .crate_name("tango") + .crate_type("rlib") + .extern_("quebec", rust_lib_name("quebec")) + .run(); + rustdoc() + .input("tango.rs") + .crate_name("tango") + .extern_("quebec", rust_lib_name("quebec")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=info/doc.parts/tango") + .run(); + + rustdoc() + .input("sierra.rs") + .crate_name("sierra") + .extern_("tango", rust_lib_name("tango")) + .library_search_path(cwd()) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=info/doc.parts/sierra") + .run(); + + htmldocck().arg(&out_dir).arg("tango.rs").run(); + htmldocck().arg(&out_dir).arg("quebec.rs").run(); + htmldocck().arg(&out_dir).arg("sierra.rs").run(); +} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs new file mode 100644 index 0000000000000..5c46c1751d6df --- /dev/null +++ b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs @@ -0,0 +1,41 @@ +//@ needs-target-std + +use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; + +fn main() { + let merged_dir = path("merged"); + let parts_out_dir = path("parts"); + let lib_dir = path("lib"); + let out_dir = path("out"); + let alt_out_dir = path("alt-out"); + + rustc().input("foxtrot.rs").crate_name("foxtrot").crate_type("rlib").run(); + rustdoc() + .input("foxtrot.rs") + .crate_name("foxtrot") + .out_dir(&alt_out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=info/doc.parts/foxtrot") + .run(); + + rustdoc() + .input("echo.rs") + .crate_name("echo") + .extern_("foxtrot", rust_lib_name("foxtrot")) + .out_dir(&out_dir) + .arg("-Zunstable-options") + .arg("--write-doc-meta-dir=info/doc.parts/echo") + .run(); + + let output = rustdoc() + .arg("-Zunstable-options") + .out_dir(&out_dir) + .arg("--read-doc-meta-dir=info/doc.parts/echo") + .arg("--read-doc-meta-dir=info/doc.parts/foxtrot") + .arg("--enable-index-page") + .run(); + output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); + + htmldocck().arg(&out_dir).arg("echo.rs").run(); + htmldocck().arg(&out_dir).arg("foxtrot.rs").run(); +} From 32f1625a0e74204ba6bdcacce52edb66aa2ebb04 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 17 Jul 2026 15:34:13 -0700 Subject: [PATCH 04/12] Document the changed doc meta features --- src/doc/rustdoc/src/unstable-features.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md index 26985e67abb6e..4fad13c14eb9f 100644 --- a/src/doc/rustdoc/src/unstable-features.md +++ b/src/doc/rustdoc/src/unstable-features.md @@ -206,17 +206,15 @@ This is very easy to use in scripts that manually invoke rustdoc, but it's also performs O(crates) work on every crate, meaning it performs O(crates2) work. When `--write-doc-meta-dir` and/or `--read-doc-meta-dir` are supplied, this is turned off. -When `--write-doc-meta-dir` is supplied, rustdoc will write the crate's metadata to that directory. -If this parameter is supplied but `--read-doc-meta-dir` isn't, it runs in *intermediate mode*: -some pages may be written to the output dir, but there is a lot of functionality that won't work -until rustdoc is run in *finalize mode*. +When `--write-doc-meta-dir` is supplied, rustdoc will write the crate's shared metadata to +that directory. This is an *intermediate mode* where it may write some files to the doc output +directory, but some features won't work until it is finalized. -When `--read-doc-meta-dir` is supplied, rustdoc runs in *finalize mode*. It will read the data from -the supplied directory, and will write it to the doc output directory in the form that the web -frontend will use. +When `--read-doc-meta-dir` is supplied, it runs it in *finalize mode*. No crate source code is +passed to rustdoc when it runs in this mode. Multiple `--read-doc-meta-dir` can be passed to +rustdoc, so your build system can split the state between multiple directories if that helps. -If both `--write-doc-meta-dir` and `--read-doc-meta-dir` are specified, the crate metadata will be -written to both the HTML `--out-dir` and to the supplied `--write-doc-meta-dir`. +Both `--write-doc-meta-dir` and `--read-doc-meta-dir` can't be supplied at once. ```console $ rustdoc crate1.rs --out-dir=doc @@ -231,10 +229,13 @@ To delay shared-data merging until the end of a build, so that you only have to work, use `--write-doc-meta-dir` on every crate, and the last will use `--read-doc-meta-dir`. ```console -$ rustdoc +nightly crate1.rs --write-doc-meta=crate1.d -Zunstable-options +$ rustdoc +nightly crate1.rs --write-doc-meta-dir=crate1.d -Zunstable-options $ cat doc/search.index/crateNames/* cat: 'doc/search.index/crateNames/*': No such file or directory -$ rustdoc +nightly crate2.rs --read-doc-meta=crate1.d -Zunstable-options +$ rustdoc +nightly crate2.rs --write-doc-meta-dir=crate2.d -Zunstable-options +$ cat doc/search.index/crateNames/* +cat: 'doc/search.index/crateNames/*': No such file or directory +$ rustdoc +nightly --read-doc-meta-dir=crate1.d --read-doc-meta-dir=crate2.d -Zunstable-options $ cat doc/search.index/crateNames/* rd_("fcrate1fcrate2") ``` From 18d6ebf012fbc3856e97200283d4eaddea862670 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 24 Jul 2026 21:59:39 -0700 Subject: [PATCH 05/12] Update src/doc/rustdoc/src/unstable-features.md Co-authored-by: Noah Lev <37223377+camelid@users.noreply.github.com> --- src/doc/rustdoc/src/unstable-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md index 4fad13c14eb9f..992d8e84ad370 100644 --- a/src/doc/rustdoc/src/unstable-features.md +++ b/src/doc/rustdoc/src/unstable-features.md @@ -214,7 +214,7 @@ When `--read-doc-meta-dir` is supplied, it runs it in *finalize mode*. No crate passed to rustdoc when it runs in this mode. Multiple `--read-doc-meta-dir` can be passed to rustdoc, so your build system can split the state between multiple directories if that helps. -Both `--write-doc-meta-dir` and `--read-doc-meta-dir` can't be supplied at once. +`--write-doc-meta-dir` and `--read-doc-meta-dir` cannot both be passed to the same rustdoc invocation. ```console $ rustdoc crate1.rs --out-dir=doc From ac3994e2052a7c291f9e0a8e8df93b0adffa333e Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 24 Jul 2026 21:59:51 -0700 Subject: [PATCH 06/12] Update src/doc/rustdoc/src/unstable-features.md Co-authored-by: Noah Lev <37223377+camelid@users.noreply.github.com> --- src/doc/rustdoc/src/unstable-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md index 992d8e84ad370..21351ff0cd646 100644 --- a/src/doc/rustdoc/src/unstable-features.md +++ b/src/doc/rustdoc/src/unstable-features.md @@ -210,7 +210,7 @@ When `--write-doc-meta-dir` is supplied, rustdoc will write the crate's shared m that directory. This is an *intermediate mode* where it may write some files to the doc output directory, but some features won't work until it is finalized. -When `--read-doc-meta-dir` is supplied, it runs it in *finalize mode*. No crate source code is +When `--read-doc-meta-dir` is supplied, rustdoc runs in *finalize mode*. No crate source code is passed to rustdoc when it runs in this mode. Multiple `--read-doc-meta-dir` can be passed to rustdoc, so your build system can split the state between multiple directories if that helps. From c352016f8aa7b01cfa240b89c56a4ea544a99644 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 24 Jul 2026 21:59:08 -0700 Subject: [PATCH 07/12] rustdoc: clean up unused `@` build diectives --- .../quebec.rs | 3 --- .../sierra.rs | 5 ----- .../tango.rs | 5 ----- .../indigo.rs | 12 ------------ .../quebec.rs | 5 ----- .../rmake.rs | 4 ---- .../romeo.rs | 7 ------- .../sierra.rs | 7 ------- .../tango.rs | 7 ------- .../quebec.rs | 5 ----- .../rmake.rs | 2 -- .../sierra.rs | 6 ------ .../tango.rs | 7 ------- .../quebec.rs | 4 ---- .../rmake.rs | 2 -- .../sierra.rs | 6 ------ .../tango.rs | 6 ------ .../quebec.rs | 4 ---- .../rmake.rs | 2 -- .../sierra.rs | 6 ------ .../tango.rs | 6 ------ .../quebec.rs | 5 ----- .../rmake.rs | 2 -- .../sierra.rs | 7 ------- .../tango.rs | 7 ------- .../quebec.rs | 4 ---- .../rmake.rs | 2 -- .../sierra.rs | 5 ----- .../tango.rs | 6 ------ .../quebec.rs | 3 --- .../quebec.rs | 3 --- .../quebec.rs | 4 ---- .../rmake.rs | 2 -- .../sierra.rs | 7 ------- .../tango.rs | 6 ------ .../quebec.rs | 3 --- .../rmake.rs | 2 -- .../sierra.rs | 5 ----- .../tango.rs | 5 ----- .../quebec.rs | 4 ---- .../rmake.rs | 2 -- .../sierra.rs | 6 ------ .../tango.rs | 6 ------ .../echo.rs | 5 ----- .../foxtrot.rs | 4 ---- .../rmake.rs | 1 - 46 files changed, 217 deletions(-) diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs index c4b3ce498576c..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs @@ -1,4 +1 @@ -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs index 10f12ad8d1184..ac75e2699eb15 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs @@ -1,8 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has index.html //@ has index.html '//h1' 'List of all crates' //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs index 299a673418713..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs @@ -1,7 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs index 986c58deb5d6b..fc609153dc69e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs @@ -1,15 +1,3 @@ -//@ aux-build:tango.rs -//@ aux-build:romeo.rs -//@ aux-build:quebec.rs -//@ aux-build:sierra.rs -//@ build-aux-docs -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/romeo -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/sierra -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has index.html '//h1' 'List of all crates' //@ has index.html //@ has index.html '//ul[@class="all-items"]//a[@href="indigo/index.html"]' 'indigo' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs index d2af9af496bc3..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs @@ -1,6 +1 @@ -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs index d92ac11b56c58..d71ad416d741b 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs @@ -91,9 +91,5 @@ fn main() { .run(); output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); - htmldocck().arg(&out_dir).arg("sierra.rs").run(); htmldocck().arg(&out_dir).arg("indigo.rs").run(); - htmldocck().arg(&out_dir).arg("romeo.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs index bcccc05299a79..772119ef133c2 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs @@ -1,9 +1,2 @@ -//@ aux-build:sierra.rs -//@ build-aux-docs -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/romeo -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate sierra; pub type Romeo = sierra::Sierra; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs index 9d5e564720169..796f5118d28b9 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs @@ -1,10 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/sierra -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate tango; pub struct Sierra; impl tango::Tango for Sierra {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs index 577c486a3adfb..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs @@ -1,9 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs index d2af9af496bc3..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs @@ -1,6 +1 @@ -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs index d996fecc94160..0d09bf7a673f8 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs @@ -45,7 +45,5 @@ fn main() { .run(); assert!(parts_out_dir.join("sierra.json").exists()); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs index 9a6ca3c6dd41c..27a23f4197a27 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs @@ -1,9 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/sierra -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ !has index.html //@ has sierra/struct.Sierra.html //@ hasraw sierra/struct.Sierra.html 'Tango' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs index 577c486a3adfb..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs @@ -1,9 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs index 442eacb91f480..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs @@ -1,5 +1 @@ -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs index 7618e0c711fd5..20ca2b902e729 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs @@ -42,7 +42,5 @@ fn main() { .arg("--write-doc-meta-dir=parts-wrong") .run(); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs index 9d5a1a3c17bfa..8ed9fdd896152 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs @@ -1,9 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/sierra -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ !has index.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs index e10bab806ea0c..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs @@ -1,8 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs index 442eacb91f480..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs @@ -1,5 +1 @@ -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs index e15e6dab4f82d..2e03d89635614 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs @@ -51,7 +51,5 @@ fn main() { .run(); output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs index 2d94321ed7465..9a485b13e09b9 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs @@ -1,9 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has quebec/struct.Quebec.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs index e10bab806ea0c..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs @@ -1,8 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs index d2af9af496bc3..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs @@ -1,6 +1 @@ -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs index ae0b55dc8d2de..0732220e39125 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs @@ -52,7 +52,5 @@ fn main() { .run(); output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs index 6a2dbb1c31ccc..d4bc4f45104e0 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs @@ -1,10 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has index.html //@ has index.html '//h1' 'List of all crates' //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs index 577c486a3adfb..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs @@ -1,9 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs index 35098e62cede9..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs @@ -1,5 +1 @@ -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/quebec.d -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs index c99c1c2f8e623..87b92e7701560 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs @@ -48,7 +48,5 @@ fn main() { .out_dir(&out_dir) .run(); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs index 57c9732ba8dd7..d95d1495a3210 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs @@ -1,8 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has quebec/struct.Quebec.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs index dcb7965dde86e..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs @@ -1,8 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ doc-flags:--read-doc-meta-dir=info/doc.parts -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs index c157380edf1f9..4ce2af25720e2 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs @@ -1,6 +1,3 @@ -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has index.html //@ has index.html '//h1' 'List of all crates' //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs index 4fd510e31227c..73a8bf1790491 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs @@ -1,6 +1,3 @@ -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has index.html //@ has index.html '//h1' 'List of all crates' //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs index 442eacb91f480..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs @@ -1,5 +1 @@ -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs index d61f7f3bb10d3..e5cc54a23b7b6 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs @@ -52,7 +52,5 @@ fn main() { .run(); output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs index 945e8cf84dc7d..c7a4971e243a1 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs @@ -1,10 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has index.html //@ has index.html '//h1' 'List of all crates' //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs index e10bab806ea0c..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs @@ -1,8 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs index c4b3ce498576c..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs @@ -1,4 +1 @@ -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs index 019d497da1c65..8dbfccce6b7ea 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs @@ -42,7 +42,5 @@ fn main() { .arg("--enable-index-page") .run(); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs index 67ce91d1e225a..adc143143bc28 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs @@ -1,8 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ has index.html //@ has index.html '//h1' 'List of all crates' //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs index 299a673418713..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs @@ -1,7 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs index 442eacb91f480..3ef377298cc6e 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs @@ -1,5 +1 @@ -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/quebec -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - pub struct Quebec; diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs index dcbc605be4629..ee43a1fb99af5 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs @@ -42,7 +42,5 @@ fn main() { .arg("--write-doc-meta-dir=info/doc.parts/sierra") .run(); - htmldocck().arg(&out_dir).arg("tango.rs").run(); - htmldocck().arg(&out_dir).arg("quebec.rs").run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs index 61c60cf7c9e15..3a97632ab3896 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs @@ -1,9 +1,3 @@ -//@ aux-build:tango.rs -//@ build-aux-docs -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/sierra -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - //@ !has index.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs index e10bab806ea0c..a9a44e06c7797 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs @@ -1,8 +1,2 @@ -//@ aux-build:quebec.rs -//@ build-aux-docs -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/tango -//@ doc-flags:--enable-index-page -//@ doc-flags:-Zunstable-options - extern crate quebec; pub trait Tango {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs index 998bb559df8c1..50fd79fa1b818 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs @@ -1,8 +1,3 @@ -//@ aux-build:foxtrot.rs -//@ build-aux-docs -//@ doc-flags:--read-doc-meta-dir=info/doc.parts/foxtrot -//@ doc-flags:-Zunstable-options - //@ has echo/enum.Echo.html //@ hasraw echo/enum.Echo.html 'Foxtrot' //@ hasraw trait.impl/foxtrot/trait.Foxtrot.js 'enum.Echo.html' diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs index 713f8812a55a6..390cef74d4730 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs @@ -1,5 +1 @@ -//@ unique-doc-out-dir -//@ doc-flags:--write-doc-meta-dir=info/doc.parts/foxtrot -//@ doc-flags:-Zunstable-options - pub trait Foxtrot {} diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs index 5c46c1751d6df..2c4b0166f5684 100644 --- a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs +++ b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs @@ -37,5 +37,4 @@ fn main() { output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("echo.rs").run(); - htmldocck().arg(&out_dir).arg("foxtrot.rs").run(); } From e03942b6ce03a6a01dc15738d2b44aae80e81383 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Sat, 25 Jul 2026 18:56:44 -0700 Subject: [PATCH 08/12] rustdoc: no `--read-doc-meta-dir` and `--write-doc-meta-dir` at once --- src/librustdoc/config.rs | 16 ++++++++++------ tests/rustdoc-ui/doc-meta-read-write-err.rs | 2 ++ tests/rustdoc-ui/doc-meta-read-write-err.stderr | 2 ++ 3 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 tests/rustdoc-ui/doc-meta-read-write-err.rs create mode 100644 tests/rustdoc-ui/doc-meta-read-write-err.stderr diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 840f9d025c3cf..12f0b7b38f37a 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -613,7 +613,10 @@ impl Options { Ok(include_parts_dir) => include_parts_dir, Err(e) => dcx.fatal(e), }; - let mut should_merge = compute_should_merge(matches); + let mut should_merge = match compute_should_merge(matches) { + Ok(should_merge) => should_merge, + Err(e) => dcx.fatal(e), + }; if parts_out_dir.is_none() && include_parts_dir.is_empty() { // we'll need to get rid of this stuff once Cargo stops using them parts_out_dir = @@ -1114,15 +1117,16 @@ pub(crate) struct ShouldMerge { /// Extracts read_rendered_cci and write_rendered_cci from command line arguments, or /// reports an error if an invalid option was provided -fn compute_should_merge(m: &getopts::Matches) -> ShouldMerge { +fn compute_should_merge(m: &getopts::Matches) -> Result { match (m.opt_present("read-doc-meta-dir"), m.opt_present("write-doc-meta-dir")) { // shared mode - (false, false) => ShouldMerge { read_rendered_cci: true, write_rendered_cci: true }, + (false, false) => Ok(ShouldMerge { read_rendered_cci: true, write_rendered_cci: true }), // intermediate mode - (false, true) => ShouldMerge { read_rendered_cci: false, write_rendered_cci: false }, + (false, true) => Ok(ShouldMerge { read_rendered_cci: false, write_rendered_cci: false }), // finalize mode - (true, false) => ShouldMerge { read_rendered_cci: false, write_rendered_cci: true }, - (true, true) => ShouldMerge { read_rendered_cci: false, write_rendered_cci: true }, + (true, false) => Ok(ShouldMerge { read_rendered_cci: false, write_rendered_cci: true }), + // not valid + (true, true) => Err("cannot pass both --read-doc-meta-dir and --write-doc-meta-dir"), } } diff --git a/tests/rustdoc-ui/doc-meta-read-write-err.rs b/tests/rustdoc-ui/doc-meta-read-write-err.rs new file mode 100644 index 0000000000000..64a8ce4185b35 --- /dev/null +++ b/tests/rustdoc-ui/doc-meta-read-write-err.rs @@ -0,0 +1,2 @@ +//@ compile-flags:-Z unstable-options --read-doc-meta-dir . --write-doc-meta-dir . +//~? ERROR cannot pass both --read-doc-meta-dir and --write-doc-meta-dir diff --git a/tests/rustdoc-ui/doc-meta-read-write-err.stderr b/tests/rustdoc-ui/doc-meta-read-write-err.stderr new file mode 100644 index 0000000000000..818deb34300cd --- /dev/null +++ b/tests/rustdoc-ui/doc-meta-read-write-err.stderr @@ -0,0 +1,2 @@ +error: cannot pass both --read-doc-meta-dir and --write-doc-meta-dir + From d0fec149a1678668db744088cb6bad7899120c89 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Sat, 25 Jul 2026 19:18:55 -0700 Subject: [PATCH 09/12] rustdoc: move CCI run-make tests into the directory --- .../merge-cross-crate-info/cargo-transitive-read-write}/quebec.rs | 0 .../merge-cross-crate-info/cargo-transitive-read-write}/rmake.rs | 0 .../merge-cross-crate-info/cargo-transitive-read-write}/sierra.rs | 0 .../merge-cross-crate-info/cargo-transitive-read-write}/tango.rs | 0 .../merge-cross-crate-info/kitchen-sink-separate-dirs}/indigo.rs | 0 .../merge-cross-crate-info/kitchen-sink-separate-dirs}/quebec.rs | 0 .../merge-cross-crate-info/kitchen-sink-separate-dirs}/rmake.rs | 0 .../merge-cross-crate-info/kitchen-sink-separate-dirs}/romeo.rs | 0 .../merge-cross-crate-info/kitchen-sink-separate-dirs}/sierra.rs | 0 .../merge-cross-crate-info/kitchen-sink-separate-dirs}/tango.rs | 0 .../merge-cross-crate-info/no-merge-separate}/quebec.rs | 0 .../merge-cross-crate-info/no-merge-separate}/rmake.rs | 0 .../merge-cross-crate-info/no-merge-separate}/sierra.rs | 0 .../merge-cross-crate-info/no-merge-separate}/tango.rs | 0 .../merge-cross-crate-info/no-merge-write-anyway}/quebec.rs | 0 .../merge-cross-crate-info/no-merge-write-anyway}/rmake.rs | 0 .../merge-cross-crate-info/no-merge-write-anyway}/sierra.rs | 0 .../merge-cross-crate-info/no-merge-write-anyway}/tango.rs | 0 .../merge-cross-crate-info/overwrite-but-include}/quebec.rs | 0 .../merge-cross-crate-info/overwrite-but-include}/rmake.rs | 0 .../merge-cross-crate-info/overwrite-but-include}/sierra.rs | 0 .../merge-cross-crate-info/overwrite-but-include}/tango.rs | 0 .../merge-cross-crate-info/overwrite-but-separate}/quebec.rs | 0 .../merge-cross-crate-info/overwrite-but-separate}/rmake.rs | 0 .../merge-cross-crate-info/overwrite-but-separate}/sierra.rs | 0 .../merge-cross-crate-info/overwrite-but-separate}/tango.rs | 0 .../merge-cross-crate-info/overwrite}/quebec.rs | 0 .../merge-cross-crate-info/overwrite}/rmake.rs | 0 .../merge-cross-crate-info/overwrite}/sierra.rs | 0 .../merge-cross-crate-info/overwrite}/tango.rs | 0 .../merge-cross-crate-info/single-crate-finalize}/quebec.rs | 0 .../merge-cross-crate-info/single-crate-finalize}/rmake.rs | 0 .../merge-cross-crate-info/single-crate-read-write}/quebec.rs | 0 .../merge-cross-crate-info/single-crate-read-write}/rmake.rs | 0 .../merge-cross-crate-info/transitive-merge-none}/quebec.rs | 0 .../merge-cross-crate-info/transitive-merge-none}/rmake.rs | 0 .../merge-cross-crate-info/transitive-merge-none}/sierra.rs | 0 .../merge-cross-crate-info/transitive-merge-none}/tango.rs | 0 .../merge-cross-crate-info/transitive-merge-read-write}/quebec.rs | 0 .../merge-cross-crate-info/transitive-merge-read-write}/rmake.rs | 0 .../merge-cross-crate-info/transitive-merge-read-write}/sierra.rs | 0 .../merge-cross-crate-info/transitive-merge-read-write}/tango.rs | 0 .../merge-cross-crate-info/transitive-no-info}/quebec.rs | 0 .../merge-cross-crate-info/transitive-no-info}/rmake.rs | 0 .../merge-cross-crate-info/transitive-no-info}/sierra.rs | 0 .../merge-cross-crate-info/transitive-no-info}/tango.rs | 0 .../merge-cross-crate-info/two-separate-out-dir}/echo.rs | 0 .../merge-cross-crate-info/two-separate-out-dir}/foxtrot.rs | 0 .../merge-cross-crate-info/two-separate-out-dir}/rmake.rs | 0 49 files changed, 0 insertions(+), 0 deletions(-) rename tests/run-make/{rustdoc-merge-cross-crate-info-cargo-transitive-read-write => rustdoc/merge-cross-crate-info/cargo-transitive-read-write}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-cargo-transitive-read-write => rustdoc/merge-cross-crate-info/cargo-transitive-read-write}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-cargo-transitive-read-write => rustdoc/merge-cross-crate-info/cargo-transitive-read-write}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-cargo-transitive-read-write => rustdoc/merge-cross-crate-info/cargo-transitive-read-write}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs => rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs}/indigo.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs => rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs => rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs => rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs}/romeo.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs => rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs => rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-no-merge-separate => rustdoc/merge-cross-crate-info/no-merge-separate}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-no-merge-separate => rustdoc/merge-cross-crate-info/no-merge-separate}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-no-merge-separate => rustdoc/merge-cross-crate-info/no-merge-separate}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-no-merge-separate => rustdoc/merge-cross-crate-info/no-merge-separate}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-no-merge-write-anyway => rustdoc/merge-cross-crate-info/no-merge-write-anyway}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-no-merge-write-anyway => rustdoc/merge-cross-crate-info/no-merge-write-anyway}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-no-merge-write-anyway => rustdoc/merge-cross-crate-info/no-merge-write-anyway}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-no-merge-write-anyway => rustdoc/merge-cross-crate-info/no-merge-write-anyway}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite-but-include => rustdoc/merge-cross-crate-info/overwrite-but-include}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite-but-include => rustdoc/merge-cross-crate-info/overwrite-but-include}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite-but-include => rustdoc/merge-cross-crate-info/overwrite-but-include}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite-but-include => rustdoc/merge-cross-crate-info/overwrite-but-include}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite-but-separate => rustdoc/merge-cross-crate-info/overwrite-but-separate}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite-but-separate => rustdoc/merge-cross-crate-info/overwrite-but-separate}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite-but-separate => rustdoc/merge-cross-crate-info/overwrite-but-separate}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite-but-separate => rustdoc/merge-cross-crate-info/overwrite-but-separate}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite => rustdoc/merge-cross-crate-info/overwrite}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite => rustdoc/merge-cross-crate-info/overwrite}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite => rustdoc/merge-cross-crate-info/overwrite}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-overwrite => rustdoc/merge-cross-crate-info/overwrite}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-single-crate-finalize => rustdoc/merge-cross-crate-info/single-crate-finalize}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-single-crate-finalize => rustdoc/merge-cross-crate-info/single-crate-finalize}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-single-crate-read-write => rustdoc/merge-cross-crate-info/single-crate-read-write}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-single-crate-read-write => rustdoc/merge-cross-crate-info/single-crate-read-write}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-merge-none => rustdoc/merge-cross-crate-info/transitive-merge-none}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-merge-none => rustdoc/merge-cross-crate-info/transitive-merge-none}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-merge-none => rustdoc/merge-cross-crate-info/transitive-merge-none}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-merge-none => rustdoc/merge-cross-crate-info/transitive-merge-none}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-merge-read-write => rustdoc/merge-cross-crate-info/transitive-merge-read-write}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-merge-read-write => rustdoc/merge-cross-crate-info/transitive-merge-read-write}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-merge-read-write => rustdoc/merge-cross-crate-info/transitive-merge-read-write}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-merge-read-write => rustdoc/merge-cross-crate-info/transitive-merge-read-write}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-no-info => rustdoc/merge-cross-crate-info/transitive-no-info}/quebec.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-no-info => rustdoc/merge-cross-crate-info/transitive-no-info}/rmake.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-no-info => rustdoc/merge-cross-crate-info/transitive-no-info}/sierra.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-transitive-no-info => rustdoc/merge-cross-crate-info/transitive-no-info}/tango.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-two-separate-out-dir => rustdoc/merge-cross-crate-info/two-separate-out-dir}/echo.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-two-separate-out-dir => rustdoc/merge-cross-crate-info/two-separate-out-dir}/foxtrot.rs (100%) rename tests/run-make/{rustdoc-merge-cross-crate-info-two-separate-out-dir => rustdoc/merge-cross-crate-info/two-separate-out-dir}/rmake.rs (100%) diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/romeo.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/romeo.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/overwrite/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-read-write/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/single-crate-read-write/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-read-write/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/single-crate-read-write/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/quebec.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/quebec.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/rmake.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/sierra.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/sierra.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/tango.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/tango.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs b/tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/echo.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/echo.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs b/tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/foxtrot.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/foxtrot.rs diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/rmake.rs similarity index 100% rename from tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs rename to tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/rmake.rs From 9d136ed4fe17bbc431424f8a0b0eebb393705b89 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Mon, 27 Jul 2026 20:28:49 -0700 Subject: [PATCH 10/12] rustdoc: stop constructing an unneeded synth Crate --- src/librustdoc/html/render/write_shared.rs | 12 ++--- src/librustdoc/lib.rs | 61 +++++++++------------- 2 files changed, 31 insertions(+), 42 deletions(-) diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index 69a1cbaf2874f..8277cbb906d24 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -30,6 +30,7 @@ use rustc_data_structures::flock; use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet}; use rustc_middle::ty::TyCtxt; use rustc_middle::ty::fast_reject::DeepRejectCtxt; +use rustc_session::Session; use rustc_span::Symbol; use rustc_span::def_id::DefId; use serde::de::DeserializeOwned; @@ -112,7 +113,7 @@ pub(crate) fn write_shared( &cx.shared.resource_suffix, cx.info.include_sources, &cx.shared.layout, - cx.shared.tcx, + cx.sess(), )?; } @@ -132,7 +133,7 @@ pub(crate) fn write_not_crate_specific( resource_suffix: &str, include_sources: bool, layout: &layout::Layout, - tcx: TyCtxt<'_>, + sess: &Session, ) -> Result<(), Error> { write_rendered_cross_crate_info(crates, dst, opt, include_sources, resource_suffix)?; write_resources(dst, opt, style_files, css_file_extension, resource_suffix)?; @@ -141,11 +142,8 @@ pub(crate) fn write_not_crate_specific( let mut md_opts = opt.clone(); md_opts.output = dst.to_path_buf(); md_opts.external_html = layout.external_html.clone(); - let file = try_err!(tcx.sess.source_map().load_file(&index_page), &index_page); - try_err!( - crate::markdown::render_and_write(file, md_opts, tcx.sess.edition()), - &index_page - ); + let file = try_err!(sess.source_map().load_file(&index_page), &index_page); + try_err!(crate::markdown::render_and_write(file, md_opts, sess.edition()), &index_page); } None if opt.enable_index_page => { write_rendered_cci::( diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 321cafb8f434f..4c0c80eb749a7 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -773,50 +773,41 @@ fn run_renderer< /// we can run rustdoc without a crate root in the `--merge=finalize` mode. Cross-crate info files /// discovered via `--read-doc-meta-dir` are combined and written to the doc root. fn run_merge_finalize( - opt: config::RenderOptions, + render_options: config::RenderOptions, compiler: &interface::Compiler, ) -> Result<(), error::Error> { assert!( - opt.should_merge.write_rendered_cci, + render_options.should_merge.write_rendered_cci, "config.rs only allows us to return InputMode::NoInputMergeFinalize if --merge=finalize" ); assert!( - !opt.should_merge.read_rendered_cci, + !render_options.should_merge.read_rendered_cci, "config.rs only allows us to return InputMode::NoInputMergeFinalize if --merge=finalize" ); - let crates = html::render::CrateInfo::read_many(&opt.include_parts_dir)?; - let include_sources = !opt.html_no_source; + let crates = html::render::CrateInfo::read_many(&render_options.include_parts_dir)?; + let include_sources = !render_options.html_no_source; - let krate = ast::Crate { - attrs: Default::default(), - items: Default::default(), - spans: Default::default(), - id: ast::DUMMY_NODE_ID, - is_placeholder: false, - }; - rustc_interface::create_and_enter_global_ctxt(compiler, krate, |tcx| { - html::render::write_not_crate_specific( - &crates, - &opt.output, - &opt, - &opt.themes, - opt.extension_css.as_deref(), - &opt.resource_suffix, - include_sources, - &crate::html::layout::Layout { - logo: String::new(), - favicon: String::new(), - external_html: opt.external_html.clone(), - default_settings: opt.default_settings.clone(), - krate: String::new(), - krate_version: String::new(), - css_file_extension: opt.extension_css.clone(), - scrape_examples_extension: false, - }, - tcx, - )?; - Ok(()) - }) + html::render::write_not_crate_specific( + &crates, + &render_options.output, + &render_options, + &render_options.themes, + render_options.extension_css.as_deref(), + &render_options.resource_suffix, + include_sources, + &crate::html::layout::Layout { + logo: String::new(), + favicon: String::new(), + external_html: render_options.external_html.clone(), + default_settings: render_options.default_settings.clone(), + krate: String::new(), + krate_version: String::new(), + css_file_extension: render_options.extension_css.clone(), + scrape_examples_extension: false, + }, + &compiler.sess, + )?; + Ok(()) } fn main_args(early_dcx: &mut EarlyDiagCtxt, at_args: &[String]) { From f73cd1ea801ef6443b1cf446cd957fc9b5ea0d2b Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Mon, 27 Jul 2026 20:49:01 -0700 Subject: [PATCH 11/12] rustdoc: remove unused code from rmake tests --- .../cargo-transitive-read-write/rmake.rs | 5 +---- .../kitchen-sink-separate-dirs/rmake.rs | 6 +----- .../no-merge-separate/rmake.rs | 2 -- .../no-merge-write-anyway/rmake.rs | 11 +++++------ .../overwrite-but-include/rmake.rs | 6 +----- .../overwrite-but-separate/rmake.rs | 6 +----- .../merge-cross-crate-info/overwrite/rmake.rs | 6 +----- .../single-crate-finalize/rmake.rs | 3 +-- .../transitive-merge-none/rmake.rs | 6 +----- .../transitive-merge-read-write/rmake.rs | 3 --- .../transitive-no-info/rmake.rs | 3 --- .../two-separate-out-dir/rmake.rs | 6 +----- tests/run-make/rustdoc/merge-dir-alias/rmake.rs | 12 ++++-------- tests/run-make/rustdoc/merge-dir/rmake.rs | 3 +-- 14 files changed, 18 insertions(+), 60 deletions(-) diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/rmake.rs index bafd625dbc8b2..6cfc6ed9230ec 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/rmake.rs @@ -3,9 +3,7 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); @@ -45,13 +43,12 @@ fn main() { .run(); assert!(parts_out_dir.join("sierra.json").exists()); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) .arg("--enable-index-page") .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("tango.rs").run(); htmldocck().arg(&out_dir).arg("quebec.rs").run(); diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/rmake.rs index d71ad416d741b..0191e659c5eef 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); @@ -79,7 +76,7 @@ fn main() { .arg("--enable-index-page") .run(); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg("--read-doc-meta-dir=info/doc.parts/tango") @@ -89,7 +86,6 @@ fn main() { .arg("--read-doc-meta-dir=info/doc.parts/indigo") .arg("--enable-index-page") .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("indigo.rs").run(); } diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/rmake.rs index 0d09bf7a673f8..1d6e004b078f0 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/rmake.rs @@ -3,9 +3,7 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/rmake.rs index 20ca2b902e729..84dfda3b040c0 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rfs, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); @@ -14,7 +11,9 @@ fn main() { .crate_name("quebec") .out_dir(&out_dir) .arg("-Zunstable-options") - .arg("--write-doc-meta-dir=parts-wrong") + // all these invocations of rustdoc write the parts, + // but none of them ever reads them + .arg("--write-doc-meta-dir=parts-unused") .run(); rustc() @@ -29,7 +28,7 @@ fn main() { .extern_("quebec", rust_lib_name("quebec")) .out_dir(&out_dir) .arg("-Zunstable-options") - .arg("--write-doc-meta-dir=parts-wrong") + .arg("--write-doc-meta-dir=parts-unused") .run(); rustdoc() @@ -39,7 +38,7 @@ fn main() { .library_search_path(cwd()) .out_dir(&out_dir) .arg("-Zunstable-options") - .arg("--write-doc-meta-dir=parts-wrong") + .arg("--write-doc-meta-dir=parts-unused") .run(); htmldocck().arg(&out_dir).arg("sierra.rs").run(); diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/rmake.rs index 2e03d89635614..8b650055953fe 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-include/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); @@ -42,14 +39,13 @@ fn main() { .arg(format!("--write-doc-meta-dir=info/doc.parts/sierra")) .run(); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir=info/doc.parts/tango")) .arg(format!("--read-doc-meta-dir=info/doc.parts/sierra")) .arg("--enable-index-page") .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/rmake.rs index 0732220e39125..537058d09f66a 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); @@ -42,7 +39,7 @@ fn main() { .arg(format!("--write-doc-meta-dir=info/doc.parts/sierra")) .run(); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir=info/doc.parts/tango")) @@ -50,7 +47,6 @@ fn main() { .arg(format!("--read-doc-meta-dir=info/doc.parts/sierra")) .arg("--enable-index-page") .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/overwrite/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite/rmake.rs index 87b92e7701560..ced70ac3f526f 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/overwrite/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); @@ -32,13 +29,12 @@ fn main() { .arg(format!("--write-doc-meta-dir=info/doc.parts")) .run(); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir=info/doc.parts")) .arg("--enable-index-page") .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); rustdoc() .input("sierra.rs") diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/rmake.rs index 18a1e3fe78a6c..79f05c37e3104 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/rmake.rs @@ -15,13 +15,12 @@ fn main() { .run(); assert!(parts_out_dir.join("quebec.json").exists()); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) .arg("--enable-index-page") .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("quebec.rs").run(); } diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/rmake.rs index e5cc54a23b7b6..28bbbc8fda039 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); @@ -42,7 +39,7 @@ fn main() { .arg("--write-doc-meta-dir=info/doc.parts/sierra") .run(); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg("--read-doc-meta-dir=info/doc.parts/tango") @@ -50,7 +47,6 @@ fn main() { .arg("--read-doc-meta-dir=info/doc.parts/sierra") .arg("--enable-index-page") .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("sierra.rs").run(); } diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/rmake.rs index 8dbfccce6b7ea..f43d940a32af1 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/rmake.rs index ee43a1fb99af5..bd8fd59ed1c2a 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run(); diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/rmake.rs b/tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/rmake.rs index 2c4b0166f5684..69275a28ca8f9 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/rmake.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/two-separate-out-dir/rmake.rs @@ -3,9 +3,6 @@ use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc}; fn main() { - let merged_dir = path("merged"); - let parts_out_dir = path("parts"); - let lib_dir = path("lib"); let out_dir = path("out"); let alt_out_dir = path("alt-out"); @@ -27,14 +24,13 @@ fn main() { .arg("--write-doc-meta-dir=info/doc.parts/echo") .run(); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg("--read-doc-meta-dir=info/doc.parts/echo") .arg("--read-doc-meta-dir=info/doc.parts/foxtrot") .arg("--enable-index-page") .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("echo.rs").run(); } diff --git a/tests/run-make/rustdoc/merge-dir-alias/rmake.rs b/tests/run-make/rustdoc/merge-dir-alias/rmake.rs index 8a5c1aa2af723..3e4941c7a8769 100644 --- a/tests/run-make/rustdoc/merge-dir-alias/rmake.rs +++ b/tests/run-make/rustdoc/merge-dir-alias/rmake.rs @@ -18,12 +18,11 @@ fn main() { .run(); assert!(parts_out_dir.join("dep1.json").exists()); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); rustdoc() .input("dep2.rs") @@ -33,12 +32,11 @@ fn main() { .run(); assert!(parts_out_dir.join("dep2.json").exists()); - let output2 = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) .run(); - output2.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); rustdoc() .input("dep1.rs") @@ -48,12 +46,11 @@ fn main() { .run(); assert!(parts_out_dir.join("dep1.json").exists()); - let output3 = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) .run(); - output3.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); // dep_missing is different, because --write-doc-meta-dir is not supplied rustdoc().input("dep_missing.rs").out_dir(&out_dir).run(); @@ -67,12 +64,11 @@ fn main() { .run(); assert!(parts_out_dir.join("dep1.json").exists()); - let output4 = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) .run(); - output4.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("dep1.rs").run(); htmldocck().arg(&out_dir).arg("dep2.rs").run(); diff --git a/tests/run-make/rustdoc/merge-dir/rmake.rs b/tests/run-make/rustdoc/merge-dir/rmake.rs index d2d31138bf3c6..e0f144f6234f4 100644 --- a/tests/run-make/rustdoc/merge-dir/rmake.rs +++ b/tests/run-make/rustdoc/merge-dir/rmake.rs @@ -30,12 +30,11 @@ fn main() { rustdoc().input("dep_missing.rs").out_dir(&out_dir).run(); assert!(parts_out_dir.join("dep2.json").exists()); - let output = rustdoc() + rustdoc() .arg("-Zunstable-options") .out_dir(&out_dir) .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display())) .run(); - output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug."); htmldocck().arg(&out_dir).arg("dep1.rs").run(); htmldocck().arg(&out_dir).arg("dep2.rs").run(); From 5f940dfd037852262cbed3ab5fd7b3320b862453 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Wed, 29 Jul 2026 20:13:07 -0700 Subject: [PATCH 12/12] rustdoc: generate settings and help at finalize --- src/librustdoc/html/render/context.rs | 117 +-------------- src/librustdoc/html/render/mod.rs | 9 +- src/librustdoc/html/render/write_shared.rs | 139 +++++++++++++++++- .../cargo-transitive-read-write/sierra.rs | 2 + .../kitchen-sink-separate-dirs/indigo.rs | 2 + .../no-merge-separate/sierra.rs | 2 + .../no-merge-write-anyway/sierra.rs | 2 + .../overwrite-but-separate/sierra.rs | 2 + .../single-crate-finalize/quebec.rs | 2 + .../single-crate-read-write/quebec.rs | 2 + .../transitive-merge-none/sierra.rs | 2 + .../transitive-merge-read-write/sierra.rs | 2 + .../transitive-no-info/sierra.rs | 2 + 13 files changed, 167 insertions(+), 118 deletions(-) diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 9e52b03b3210b..34a471fae18d2 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -20,11 +20,11 @@ use tracing::info; use super::print_item::{full_path, print_item, print_item_path, print_ty_path}; use super::sidebar::{ModuleLike, Sidebar, print_sidebar, sidebar_module_like}; -use super::{AllTypes, StylePath, scrape_examples_help}; +use super::{AllTypes, StylePath}; use crate::clean::types::ExternalLocation; use crate::clean::utils::has_doc_flag; use crate::clean::{self, ExternalCrate}; -use crate::config::{EmitType, ModuleSorting, RenderOptions, ShouldMerge}; +use crate::config::{EmitType, ModuleSorting, RenderOptions}; use crate::docfs::{DocFS, PathError}; use crate::error::Error; use crate::formats::FormatRenderer; @@ -36,9 +36,9 @@ use crate::html::markdown::{self, ErrorCodes, IdMap, plain_text_summary}; use crate::html::render::write_shared::write_shared; use crate::html::span_map::{LinkFromSrc, Span, collect_spans_and_sources}; use crate::html::url_parts_builder::UrlPartsBuilder; -use crate::html::{layout, sources, static_files}; +use crate::html::{layout, sources}; use crate::scrape_examples::AllCallLocations; -use crate::{DOC_RUST_LANG_ORG_VERSION, try_err}; +use crate::try_err; /// Major driving force in all rustdoc rendering. This contains information /// about where in the tree-like hierarchy rendering is occurring and controls @@ -148,9 +148,6 @@ pub(crate) struct SharedContext<'tcx> { /// The [`Cache`] used during rendering. pub(crate) cache: Cache, pub(crate) call_locations: AllCallLocations, - /// Controls whether we read / write to cci files in the doc root. Defaults read=true, - /// write=true - should_merge: ShouldMerge, } impl SharedContext<'_> { @@ -615,7 +612,6 @@ impl<'tcx> Context<'tcx> { span_correspondence_map: matches, cache, call_locations, - should_merge: options.should_merge, expanded_codes, }; @@ -666,16 +662,13 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { fn after_krate(mut self) -> Result<(), Error> { let crate_name = self.tcx().crate_name(LOCAL_CRATE); let final_file = self.dst.join(crate_name.as_str()).join("all.html"); - let settings_file = self.dst.join("settings.html"); - let help_file = self.dst.join("help.html"); - let scrape_examples_help_file = self.dst.join("scrape-examples-help.html"); let mut root_path = self.dst.to_str().expect("invalid path").to_owned(); if !root_path.ends_with('/') { root_path.push('/'); } let shared = &self.shared; - let mut page = layout::Page { + let page = layout::Page { title: "List of all items in this crate", short_title: "All", css_class: "mod sys", @@ -705,106 +698,6 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { let v = layout::render(&shared.layout, &page, sidebar, all.print(), &shared.style_files); shared.fs.write(final_file, v)?; - // if to avoid writing help, settings files to doc root unless we're on the final invocation - if shared.should_merge.write_rendered_cci { - // Generating settings page. - page.title = "Settings"; - page.description = "Settings of Rustdoc"; - page.root_path = "./"; - page.rust_logo = true; - - let sidebar = "

Settings

"; - let v = layout::render( - &shared.layout, - &page, - sidebar, - fmt::from_fn(|buf| { - write!( - buf, - "
\ -

Rustdoc settings

\ - \ - \ - Back\ - \ - \ -
\ - \ - ", - static_root_path = page.get_static_root_path(), - settings_js = static_files::STATIC_FILES.settings_js, - )?; - // Pre-load all theme CSS files, so that switching feels seamless. - // - // When loading settings.html as a popover, the equivalent HTML is - // generated in main.js. - for file in &shared.style_files { - if let Ok(theme) = file.basename() { - write!( - buf, - "", - root_path = page.static_root_path.unwrap_or(""), - suffix = page.resource_suffix, - )?; - } - } - Ok(()) - }), - &shared.style_files, - ); - shared.fs.write(settings_file, v)?; - - // Generating help page. - page.title = "Help"; - page.description = "Documentation for Rustdoc"; - page.root_path = "./"; - page.rust_logo = true; - - let sidebar = "

Help

"; - let v = layout::render( - &shared.layout, - &page, - sidebar, - format_args!( - "
\ -

Rustdoc help

\ - \ - \ - Back\ - \ - \ -
\ - ", - ), - &shared.style_files, - ); - shared.fs.write(help_file, v)?; - } - - // if to avoid writing files to doc root unless we're on the final invocation - if shared.layout.scrape_examples_extension && shared.should_merge.write_rendered_cci { - page.title = "About scraped examples"; - page.description = "How the scraped examples feature works in Rustdoc"; - let v = layout::render( - &shared.layout, - &page, - "", - scrape_examples_help(shared), - &shared.style_files, - ); - shared.fs.write(scrape_examples_help_file, v)?; - } - if let Some(ref redirections) = shared.redirections && !redirections.borrow().is_empty() { diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 9a08e76604df2..1c19c24b195c9 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -663,7 +663,7 @@ impl AllTypes { } } -fn scrape_examples_help(shared: &SharedContext<'_>) -> String { +fn scrape_examples_help() -> String { let mut content = SCRAPE_EXAMPLES_HELP_MD.to_owned(); content.push_str(&format!( "## More information\n\n\ @@ -680,9 +680,10 @@ fn scrape_examples_help(shared: &SharedContext<'_>) -> String { content: &content, links: &[], ids: &mut IdMap::default(), - error_codes: shared.codes, - edition: shared.edition(), - playground: &shared.playground, + // code snippets come from Rust itself, not the crate + error_codes: crate::html::markdown::ErrorCodes::No, + edition: rustc_span::edition::LATEST_STABLE_EDITION, + playground: &Default::default(), heading_offset: HeadingOffset::H1, } .write_into(f)) diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index 8277cbb906d24..c107dadece47f 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -50,10 +50,12 @@ use crate::html::render::ordered_json::{EscapedJson, OrderedJson}; use crate::html::render::print_item::compare_names; use crate::html::render::search_index::{SerializedSearchIndex, build_index}; use crate::html::render::sorted_template::{self, FileFormat, SortedTemplate}; -use crate::html::render::{AssocItemLink, ImplRenderingParameters, StylePath}; +use crate::html::render::{ + AssocItemLink, ImplRenderingParameters, StylePath, scrape_examples_help, +}; use crate::html::static_files::{self, suffix_path}; use crate::visit::DocVisitor; -use crate::{try_err, try_none}; +use crate::{DOC_RUST_LANG_ORG_VERSION, try_err, try_none}; pub(crate) fn write_shared( cx: &mut Context<'_>, @@ -137,6 +139,7 @@ pub(crate) fn write_not_crate_specific( ) -> Result<(), Error> { write_rendered_cross_crate_info(crates, dst, opt, include_sources, resource_suffix)?; write_resources(dst, opt, style_files, css_file_extension, resource_suffix)?; + // index.html match &opt.index_page { Some(index_page) if opt.enable_index_page => { let mut md_opts = opt.clone(); @@ -155,6 +158,138 @@ pub(crate) fn write_not_crate_specific( } _ => {} // they don't want an index page } + + if opt.emit.contains(&EmitType::HtmlNonStaticFiles) { + // Standalone pages for the Settings and Help popovers. + // + // Normally, these are pure DHTML popovers, but, for user convenience, + // the buttons that open them are links to these HTML files, which use the same JavaScript + // to populate the page. That way, you can open a new tab, or add a browser bookmark, + // that points at the page. + let settings_file = dst.join("settings.html"); + let help_file = dst.join("help.html"); + let scrape_examples_help_file = dst.join("scrape-examples-help.html"); + + let mut root_path = dst.to_str().expect("invalid path").to_owned(); + if !root_path.ends_with('/') { + root_path.push('/'); + } + + let page = layout::Page { + title: "Settings", + short_title: "Settings", + css_class: "mod sys", + root_path: "./", + static_root_path: opt.static_root_path.as_deref(), + description: "Settings of Rustdoc", + resource_suffix: &opt.resource_suffix, + rust_logo: true, + }; + let sidebar = "

Settings

"; + let v = layout::render( + &layout, + &page, + sidebar, + fmt::from_fn(|buf| { + write!( + buf, + "
\ +

Rustdoc settings

\ + \ + \ + Back\ + \ + \ +
\ + \ + ", + static_root_path = page.get_static_root_path(), + settings_js = static_files::STATIC_FILES.settings_js, + )?; + // Pre-load all theme CSS files, so that switching feels seamless. + // + // When loading settings.html as a popover, the equivalent HTML is + // generated in main.js. + for file in style_files { + if let Ok(theme) = file.basename() { + write!( + buf, + "", + root_path = page.static_root_path.unwrap_or(""), + suffix = page.resource_suffix, + )?; + } + } + Ok(()) + }), + &style_files, + ); + let mut file = try_err!(File::create_buffered(&settings_file), &settings_file); + try_err!(write!(file, "{v}"), &settings_file); + try_err!(file.flush(), &settings_file); + + let page = layout::Page { + title: "Help", + short_title: "Help", + css_class: "mod sys", + root_path: "./", + static_root_path: opt.static_root_path.as_deref(), + description: "Documentation for Rustdoc", + resource_suffix: &opt.resource_suffix, + rust_logo: true, + }; + let sidebar = "

Help

"; + let v = layout::render( + &layout, + &page, + sidebar, + format_args!( + "
\ +

Rustdoc help

\ + \ + \ + Back\ + \ + \ +
\ + ", + ), + &style_files, + ); + let mut file = try_err!(File::create_buffered(&help_file), &help_file); + try_err!(write!(file, "{v}"), &help_file); + try_err!(file.flush(), &help_file); + + if layout.scrape_examples_extension { + let page = layout::Page { + title: "About scraped examples", + short_title: "About scraped examples", + css_class: "mod sys", + root_path: "./", + static_root_path: opt.static_root_path.as_deref(), + description: "How the scraped examples feature works in Rustdoc", + resource_suffix: &opt.resource_suffix, + rust_logo: true, + }; + let v = layout::render(&layout, &page, "", scrape_examples_help(), &style_files); + let mut file = try_err!( + File::create_buffered(&scrape_examples_help_file), + &scrape_examples_help_file + ); + try_err!(write!(file, "{v}"), &scrape_examples_help_file); + try_err!(file.flush(), &scrape_examples_help_file); + } + } Ok(()) } diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs index ac75e2699eb15..cdca794601216 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs @@ -3,6 +3,8 @@ //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' //@ has index.html '//ul[@class="all-items"]//a[@href="sierra/index.html"]' 'sierra' //@ has index.html '//ul[@class="all-items"]//a[@href="tango/index.html"]' 'tango' +//@ has help.html +//@ has settings.html //@ has quebec/struct.Quebec.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs index fc609153dc69e..b512f4f7677c8 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs @@ -5,6 +5,8 @@ //@ has index.html '//ul[@class="all-items"]//a[@href="romeo/index.html"]' 'romeo' //@ has index.html '//ul[@class="all-items"]//a[@href="sierra/index.html"]' 'sierra' //@ has index.html '//ul[@class="all-items"]//a[@href="tango/index.html"]' 'tango' +//@ has help.html +//@ has settings.html //@ !has quebec/struct.Quebec.html //@ !has romeo/type.Romeo.html //@ !has sierra/struct.Sierra.html diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/sierra.rs index 27a23f4197a27..21639dc019d70 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/sierra.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-separate/sierra.rs @@ -1,4 +1,6 @@ //@ !has index.html +//@ !has help.html +//@ !has settings.html //@ has sierra/struct.Sierra.html //@ hasraw sierra/struct.Sierra.html 'Tango' //@ !has trait.impl/tango/trait.Tango.js diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/sierra.rs index 8ed9fdd896152..e5d3f99568df7 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/sierra.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/no-merge-write-anyway/sierra.rs @@ -1,4 +1,6 @@ //@ !has index.html +//@ !has help.html +//@ !has settings.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html //@ hasraw sierra/struct.Sierra.html 'Tango' diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/sierra.rs index d4bc4f45104e0..b6862f4e3c2b0 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/sierra.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/overwrite-but-separate/sierra.rs @@ -3,6 +3,8 @@ //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' //@ has index.html '//ul[@class="all-items"]//a[@href="sierra/index.html"]' 'sierra' //@ has index.html '//ul[@class="all-items"]//a[@href="tango/index.html"]' 'tango' +//@ has help.html +//@ has settings.html //@ has sierra/struct.Sierra.html //@ hasraw trait.impl/tango/trait.Tango.js 'struct.Sierra.html' //@ hasraw search.index/name/*.js 'Tango' diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/quebec.rs index 4ce2af25720e2..4541fe7a3104b 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/quebec.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-finalize/quebec.rs @@ -1,6 +1,8 @@ //@ has index.html //@ has index.html '//h1' 'List of all crates' //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' +//@ has help.html +//@ has settings.html //@ has quebec/struct.Quebec.html //@ hasraw search.index/name/*.js 'Quebec' diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-read-write/quebec.rs b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-read-write/quebec.rs index 73a8bf1790491..ff955c6efe053 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-read-write/quebec.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/single-crate-read-write/quebec.rs @@ -1,6 +1,8 @@ //@ has index.html //@ has index.html '//h1' 'List of all crates' //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' +//@ has help.html +//@ has settings.html //@ has quebec/struct.Quebec.html //@ hasraw search.index/name/*.js 'Quebec' diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/sierra.rs index c7a4971e243a1..980632473a405 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/sierra.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-none/sierra.rs @@ -3,6 +3,8 @@ //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' //@ has index.html '//ul[@class="all-items"]//a[@href="sierra/index.html"]' 'sierra' //@ has index.html '//ul[@class="all-items"]//a[@href="tango/index.html"]' 'tango' +//@ has help.html +//@ has settings.html //@ has quebec/struct.Quebec.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/sierra.rs index adc143143bc28..31b5270b68e1b 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/sierra.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-merge-read-write/sierra.rs @@ -3,6 +3,8 @@ //@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec' //@ has index.html '//ul[@class="all-items"]//a[@href="sierra/index.html"]' 'sierra' //@ has index.html '//ul[@class="all-items"]//a[@href="tango/index.html"]' 'tango' +//@ has help.html +//@ has settings.html //@ has quebec/struct.Quebec.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html diff --git a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/sierra.rs b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/sierra.rs index 3a97632ab3896..d8b8bc1271d51 100644 --- a/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/sierra.rs +++ b/tests/run-make/rustdoc/merge-cross-crate-info/transitive-no-info/sierra.rs @@ -1,4 +1,6 @@ //@ !has index.html +//@ !has help.html +//@ !has settings.html //@ has sierra/struct.Sierra.html //@ has tango/trait.Tango.html //@ hasraw sierra/struct.Sierra.html 'Tango'