feat(compile-time-deps): Add cli flag --compile-time-deps and adjust docs

This commit is contained in:
Shoyu Vanilla 2025-06-18 00:12:47 +09:00
parent 5b178a8d05
commit 072b345bbf
5 changed files with 47 additions and 24 deletions

View File

@ -38,6 +38,7 @@ pub fn cli() -> Command {
.arg_build_plan() .arg_build_plan()
.arg_unit_graph() .arg_unit_graph()
.arg_timings() .arg_timings()
.arg_compile_time_deps()
.arg_manifest_path() .arg_manifest_path()
.arg_lockfile_path() .arg_lockfile_path()
.arg_ignore_rust_version() .arg_ignore_rust_version()

View File

@ -35,6 +35,7 @@ pub fn cli() -> Command {
.arg_target_dir() .arg_target_dir()
.arg_unit_graph() .arg_unit_graph()
.arg_timings() .arg_timings()
.arg_compile_time_deps()
.arg_manifest_path() .arg_manifest_path()
.arg_lockfile_path() .arg_lockfile_path()
.arg_ignore_rust_version() .arg_ignore_rust_version()

View File

@ -521,6 +521,10 @@ pub trait CommandExt: Sized {
.hide(true), .hide(true),
) )
} }
fn arg_compile_time_deps(self) -> Self {
self._arg(flag("compile-time-deps", "").hide(true))
}
} }
impl CommandExt for Command { impl CommandExt for Command {
@ -806,6 +810,7 @@ Run `{cmd}` to see possible targets."
build_config.build_plan = self.flag("build-plan"); build_config.build_plan = self.flag("build-plan");
build_config.unit_graph = self.flag("unit-graph"); build_config.unit_graph = self.flag("unit-graph");
build_config.future_incompat_report = self.flag("future-incompat-report"); build_config.future_incompat_report = self.flag("future-incompat-report");
build_config.compile_time_deps_only = self.flag("compile-time-deps");
if self._contains("timings") { if self._contains("timings") {
for timing_output in self._values_of("timings") { for timing_output in self._values_of("timings") {
@ -840,6 +845,10 @@ Run `{cmd}` to see possible targets."
gctx.cli_unstable() gctx.cli_unstable()
.fail_if_stable_opt("--unit-graph", 8002)?; .fail_if_stable_opt("--unit-graph", 8002)?;
} }
if build_config.compile_time_deps_only {
gctx.cli_unstable()
.fail_if_stable_opt("--compile-time-deps", 14434)?;
}
let opts = CompileOptions { let opts = CompileOptions {
build_config, build_config,

View File

@ -2190,3 +2190,17 @@ More information can be found in the [config chapter](config.md#cache).
## doctest-xcompile ## doctest-xcompile
Doctest cross-compiling is now unconditionally enabled starting in Rust 1.89. Running doctests with `cargo test` will now honor the `--target` flag. Doctest cross-compiling is now unconditionally enabled starting in Rust 1.89. Running doctests with `cargo test` will now honor the `--target` flag.
## compile-time-deps
This permanently-unstable flag to only build proc-macros and build scripts (and their required dependencies),
as well as run the build scripts.
It is intended for use by tools like rust-analyzer and will never be stabilized.
Example:
```console
cargo +nightly build --compile-time-deps -Z unstable-options
cargo +nightly check --compile-time-deps --all-targets -Z unstable-options
```

View File

@ -8,13 +8,11 @@ fn gated_by_unstable_opts() {
.build(); .build();
p.cargo("check --compile-time-deps") p.cargo("check --compile-time-deps")
.with_status(1) .with_status(101)
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[ERROR] unexpected argument '--compile-time-deps' found [ERROR] the `--compile-time-deps` flag is unstable, and only available on the nightly channel of Cargo, but this is the `stable` channel
See https://doc.rust-lang.org/book/appendix-07-nightly-rust.html for more information about Rust release channels.
Usage: cargo check [OPTIONS] See https://github.com/rust-lang/cargo/issues/14434 for more information about the `--compile-time-deps` flag.
For more information, try '--help'.
"#]]) "#]])
.run(); .run();
@ -55,11 +53,10 @@ fn non_comp_time_dep() {
.file("bar/src/lib.rs", r#"pub fn bar() {}"#) .file("bar/src/lib.rs", r#"pub fn bar() {}"#)
.build(); .build();
p.cargo("check") p.cargo("-Zunstable-options check --compile-time-deps")
.masquerade_as_nightly_cargo(&["compile-time-deps"])
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[LOCKING] 1 package to latest compatible version [LOCKING] 1 package to latest compatible version
[CHECKING] bar v0.0.1 ([ROOT]/foo/bar)
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]]) "#]])
@ -151,11 +148,11 @@ fn proc_macro_dep() {
.file("baz/src/lib.rs", r#"pub fn baz() {}"#) .file("baz/src/lib.rs", r#"pub fn baz() {}"#)
.build(); .build();
p.cargo("check --package foo") p.cargo("-Zunstable-options check --package foo --compile-time-deps")
.masquerade_as_nightly_cargo(&["compile-time-deps"])
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[COMPILING] baz v0.0.1 ([ROOT]/foo/baz) [COMPILING] baz v0.0.1 ([ROOT]/foo/baz)
[COMPILING] bar v0.0.1 ([ROOT]/foo/bar) [COMPILING] bar v0.0.1 ([ROOT]/foo/bar)
[CHECKING] foo v0.0.1 ([ROOT]/foo/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]]) "#]])
@ -163,10 +160,9 @@ fn proc_macro_dep() {
p.cargo("clean").run(); p.cargo("clean").run();
p.cargo("check --package bar") p.cargo("-Zunstable-options check --package bar --compile-time-deps")
.masquerade_as_nightly_cargo(&["compile-time-deps"])
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[CHECKING] baz v0.0.1 ([ROOT]/foo/baz)
[CHECKING] bar v0.0.1 ([ROOT]/foo/bar)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]]) "#]])
@ -174,10 +170,11 @@ fn proc_macro_dep() {
p.cargo("clean").run(); p.cargo("clean").run();
p.cargo("check --package bar --all-targets") p.cargo("-Zunstable-options check --package bar --all-targets --compile-time-deps")
.masquerade_as_nightly_cargo(&["compile-time-deps"])
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[CHECKING] baz v0.0.1 ([ROOT]/foo/baz) [COMPILING] baz v0.0.1 ([ROOT]/foo/baz)
[CHECKING] bar v0.0.1 ([ROOT]/foo/bar) [COMPILING] bar v0.0.1 ([ROOT]/foo/bar)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]]) "#]])
@ -241,7 +238,8 @@ fn build_dep() {
.file("bar/baz/src/lib.rs", r#"pub fn baz() {}"#) .file("bar/baz/src/lib.rs", r#"pub fn baz() {}"#)
.build(); .build();
p.cargo("check") p.cargo("-Zunstable-options check --compile-time-deps")
.masquerade_as_nightly_cargo(&["compile-time-deps"])
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[LOCKING] 2 packages to latest compatible versions [LOCKING] 2 packages to latest compatible versions
[COMPILING] baz v0.0.1 ([ROOT]/foo/bar/baz) [COMPILING] baz v0.0.1 ([ROOT]/foo/bar/baz)
@ -314,12 +312,12 @@ fn indirect_comp_time_dep() {
.file("bar/baz/src/lib.rs", r#"pub fn baz() {}"#) .file("bar/baz/src/lib.rs", r#"pub fn baz() {}"#)
.build(); .build();
p.cargo("check") p.cargo("-Zunstable-options check --compile-time-deps")
.masquerade_as_nightly_cargo(&["compile-time-deps"])
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[LOCKING] 2 packages to latest compatible versions [LOCKING] 2 packages to latest compatible versions
[COMPILING] baz v0.0.1 ([ROOT]/foo/bar/baz) [COMPILING] baz v0.0.1 ([ROOT]/foo/bar/baz)
[COMPILING] bar v0.0.1 ([ROOT]/foo/bar) [COMPILING] bar v0.0.1 ([ROOT]/foo/bar)
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]]) "#]])
@ -379,21 +377,21 @@ fn tests_target() {
) )
.build(); .build();
p.cargo("check --tests") p.cargo("-Zunstable-options check --tests --compile-time-deps")
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[LOCKING] 1 package to latest compatible version [LOCKING] 1 package to latest compatible version
[COMPILING] bar v0.0.1 ([ROOT]/foo/bar) [COMPILING] bar v0.0.1 ([ROOT]/foo/bar)
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]]) "#]])
.masquerade_as_nightly_cargo(&["compile-time-deps"])
.run(); .run();
p.cargo("clean").run(); p.cargo("clean").run();
p.cargo("check") p.cargo("-Zunstable-options check --compile-time-deps")
.masquerade_as_nightly_cargo(&["compile-time-deps"])
.with_stderr_data(str![[r#" .with_stderr_data(str![[r#"
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]]) "#]])