diff --git a/src/cargo/core/compiler/context/mod.rs b/src/cargo/core/compiler/context/mod.rs index 910c0c77370..cb1dbb6240b 100644 --- a/src/cargo/core/compiler/context/mod.rs +++ b/src/cargo/core/compiler/context/mod.rs @@ -228,6 +228,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> { let mut unstable_opts = false; let mut args = compiler::extern_args(&self, unit, &mut unstable_opts)?; args.extend(compiler::lto_args(&self, unit)); + for feature in &unit.features { args.push("--cfg".into()); args.push(format!("feature=\"{}\"", feature).into()); @@ -242,6 +243,16 @@ impl<'a, 'cfg> Context<'a, 'cfg> { } } args.extend(self.bcx.rustdocflags_args(unit).iter().map(Into::into)); + + use super::MessageFormat; + let format = match self.bcx.build_config.message_format { + MessageFormat::Short => "short", + MessageFormat::Human => "human", + MessageFormat::Json { .. } => "json", + }; + args.push("--error-format".into()); + args.push(format.into()); + self.compilation.to_doc_test.push(compilation::Doctest { unit: unit.clone(), args, diff --git a/tests/testsuite/message_format.rs b/tests/testsuite/message_format.rs index a62be3d967f..de8e69dd0b9 100644 --- a/tests/testsuite/message_format.rs +++ b/tests/testsuite/message_format.rs @@ -1,6 +1,6 @@ //! Tests for --message-format flag. -use cargo_test_support::{basic_manifest, project}; +use cargo_test_support::{basic_lib_manifest, basic_manifest, is_nightly, project}; #[cargo_test] fn cannot_specify_two() { @@ -109,3 +109,30 @@ fn cargo_renders_ansi() { .with_stdout_contains("[..]\\u001b[38;5;9merror[..]") .run(); } + +#[cargo_test] +fn cargo_renders_doctests() { + if !is_nightly() { + // --error-format=short support added in 1.51 + return; + } + + let p = project() + .file("Cargo.toml", &basic_lib_manifest("foo")) + .file( + "src/lib.rs", + "\ + /// ```rust + /// bar() + /// ``` + pub fn bar() {} + ", + ) + .build(); + + p.cargo("test --doc --message-format short") + .with_status(101) + .with_stdout_contains("src/lib.rs:2:1: error[E0425]:[..]") + .with_stdout_contains("[..]src/lib.rs - bar (line 1)[..]") + .run(); +}