use std::path::Path; use run_make_support::{htmldocck, rfs, rustc, rustdoc}; pub fn scrape(extra_args: &[&str]) { let out_dir = Path::new("rustdoc"); let crate_name = "foobar"; let deps = rfs::read_dir("examples") .filter_map(|entry| entry.ok().map(|e| e.path())) .filter(|path| path.is_file() && path.extension().is_some_and(|ext| ext == "rs")) .collect::>(); rustc().input("src/lib.rs").crate_name(crate_name).crate_type("lib").emit("metadata").run(); let mut out_deps = Vec::with_capacity(deps.len()); for dep in deps { let dep_stem = dep.file_stem().unwrap(); let out_example = out_dir.join(format!("{}.calls", dep_stem.to_str().unwrap())); rustdoc() .input(&dep) .crate_name(&dep_stem) .crate_type("bin") .out_dir(&out_dir) .extern_(crate_name, format!("lib{crate_name}.rmeta")) .arg("-Zunstable-options") .arg("--scrape-examples-output-path") .arg(&out_example) .arg("--scrape-examples-target-crate") .arg(crate_name) .args(extra_args) .run(); out_deps.push(out_example); } let mut rustdoc = rustdoc(); rustdoc .input("src/lib.rs") .out_dir(&out_dir) .crate_name(crate_name) .crate_type("lib") .arg("-Zunstable-options"); for dep in out_deps { rustdoc.arg("--with-examples").arg(dep); } rustdoc.run(); htmldocck().arg(out_dir).arg("src/lib.rs").run(); }