Skip to content

Commit 3aa4ece

Browse files
committed
Support -C save-temps in rustdoc
This allows viewing failed merged doctests.
1 parent 29f31f1 commit 3aa4ece

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/librustdoc/doctest.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,13 @@ pub(crate) fn generate_args_file(file_path: &Path, options: &RustdocOptions) ->
123123
Ok(())
124124
}
125125

126-
fn get_doctest_dir() -> io::Result<TempDir> {
127-
TempFileBuilder::new().prefix("rustdoctest").tempdir()
126+
fn get_doctest_dir(opts: &RustdocOptions) -> io::Result<TempDir> {
127+
let mut builder = TempFileBuilder::new();
128+
builder.prefix("rustdoctest");
129+
if opts.codegen_options.save_temps {
130+
builder.disable_cleanup(true);
131+
}
132+
builder.tempdir()
128133
}
129134

130135
pub(crate) fn run(dcx: DiagCtxtHandle<'_>, input: Input, options: RustdocOptions) {
@@ -197,7 +202,7 @@ pub(crate) fn run(dcx: DiagCtxtHandle<'_>, input: Input, options: RustdocOptions
197202
let externs = options.externs.clone();
198203
let json_unused_externs = options.json_unused_externs;
199204

200-
let temp_dir = match get_doctest_dir()
205+
let temp_dir = match get_doctest_dir(&options)
201206
.map_err(|error| format!("failed to create temporary directory: {error:?}"))
202207
{
203208
Ok(temp_dir) => temp_dir,
@@ -207,6 +212,7 @@ pub(crate) fn run(dcx: DiagCtxtHandle<'_>, input: Input, options: RustdocOptions
207212
crate::wrap_return(dcx, generate_args_file(&args_path, &options));
208213

209214
let extract_doctests = options.output_format == OutputFormat::Doctest;
215+
let save_temps = options.codegen_options.save_temps;
210216
let result = interface::run_compiler(config, |compiler| {
211217
let krate = rustc_interface::passes::parse(&compiler.sess);
212218

@@ -259,7 +265,9 @@ pub(crate) fn run(dcx: DiagCtxtHandle<'_>, input: Input, options: RustdocOptions
259265
eprintln!("{error}");
260266
// Since some files in the temporary folder are still owned and alive, we need
261267
// to manually remove the folder.
262-
let _ = std::fs::remove_dir_all(temp_dir.path());
268+
if !save_temps {
269+
let _ = std::fs::remove_dir_all(temp_dir.path());
270+
}
263271
std::process::exit(1);
264272
}
265273
};

0 commit comments

Comments
 (0)