Skip to content

Commit b8a3dbe

Browse files
committed
feat(trim-paths): rustdoc supports trim-paths for diagnostics
This enables rustdoc invocation from `cargo doc` to trim paths in diagnostics. Doc tests are out-of-scope, as they are handled in a different mechanism, which needs more cares.
1 parent 33a800c commit b8a3dbe

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/cargo/core/compiler/mod.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ use crate::util::{add_path_args, internal};
9797
use cargo_util::{paths, ProcessBuilder, ProcessError};
9898
use cargo_util_schemas::manifest::TomlDebugInfo;
9999
use cargo_util_schemas::manifest::TomlTrimPaths;
100+
use cargo_util_schemas::manifest::TomlTrimPathsValue;
100101
use rustfix::diagnostics::Applicability;
101102

102103
const RUSTDOC_CRATE_VERSION_FLAG: &str = "--crate-version";
@@ -737,6 +738,10 @@ fn prepare_rustdoc(build_runner: &BuildRunner<'_, '_>, unit: &Unit) -> CargoResu
737738
add_error_format_and_color(build_runner, &mut rustdoc);
738739
add_allow_features(build_runner, &mut rustdoc);
739740

741+
if let Some(trim_paths) = unit.profile.trim_paths.as_ref() {
742+
trim_paths_args_rustdoc(&mut rustdoc, build_runner, unit, trim_paths)?;
743+
}
744+
740745
rustdoc.args(unit.pkg.manifest().lint_rustflags());
741746
if let Some(args) = build_runner.bcx.extra_args_for(unit) {
742747
rustdoc.args(args);
@@ -1223,6 +1228,32 @@ fn features_args(unit: &Unit) -> Vec<OsString> {
12231228
args
12241229
}
12251230

1231+
/// Like [`trim_paths_args`] but for rustdoc invocations.
1232+
fn trim_paths_args_rustdoc(
1233+
cmd: &mut ProcessBuilder,
1234+
build_runner: &BuildRunner<'_, '_>,
1235+
unit: &Unit,
1236+
trim_paths: &TomlTrimPaths,
1237+
) -> CargoResult<()> {
1238+
match trim_paths {
1239+
// rustdoc supports diagnostics trimming only.
1240+
TomlTrimPaths::Values(values) if !values.contains(&TomlTrimPathsValue::Diagnostics) => {
1241+
return Ok(())
1242+
}
1243+
_ => {}
1244+
}
1245+
1246+
// feature gate was checked during manifest/config parsing.
1247+
cmd.arg("-Zunstable-options");
1248+
1249+
// Order of `--remap-path-prefix` flags is important for `-Zbuild-std`.
1250+
// We want to show `/rustc/<hash>/library/std` instead of `std-0.0.0`.
1251+
cmd.arg(package_remap(build_runner, unit));
1252+
cmd.arg(sysroot_remap(build_runner, unit));
1253+
1254+
Ok(())
1255+
}
1256+
12261257
/// Generates the `--remap-path-scope` and `--remap-path-prefix` for [RFC 3127].
12271258
/// See also unstable feature [`-Ztrim-paths`].
12281259
///

tests/testsuite/profile_trim_paths.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -831,8 +831,10 @@ fn rustdoc_diagnostics_works() {
831831
.masquerade_as_nightly_cargo(&["-Ztrim-paths"])
832832
.with_stderr_data(str![[r#"
833833
...
834+
[RUNNING] `[..]rustc [..]-Zremap-path-scope=diagnostics --remap-path-prefix=[ROOT]/home/.cargo/registry/src= --remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]`
835+
...
834836
[WARNING] unopened HTML tag `script`
835-
--> [ROOT]/home/.cargo/registry/src/-[HASH]/bar-0.0.1/src/lib.rs:2:17
837+
--> -[..]/bar-0.0.1/src/lib.rs:2:17
836838
...
837839
"#]])
838840
.run();

0 commit comments

Comments
 (0)