diff --git a/crates/project_model/src/build_scripts.rs b/crates/project_model/src/build_scripts.rs index 6b601c34a24a..0f59f93720d9 100644 --- a/crates/project_model/src/build_scripts.rs +++ b/crates/project_model/src/build_scripts.rs @@ -58,7 +58,16 @@ impl WorkspaceBuildScripts { cmd.env("RA_RUSTC_WRAPPER", "1"); } cmd.current_dir(workspace.workspace_root()); - cmd.args(&["check", "--quiet", "--workspace", "--message-format=json"]); + cmd.args(&["check", "--quiet", "--message-format=json"]); + + if config.build_script_packages.is_empty() { + cmd.arg("--workspace"); + } else { + for pkg in &config.build_script_packages { + cmd.arg("-p"); + cmd.arg(pkg); + } + } // --all-targets includes tests, benches and examples in addition to the // default lib and bins. This is an independent concept from the --targets diff --git a/crates/project_model/src/cargo_workspace.rs b/crates/project_model/src/cargo_workspace.rs index 48051e4b5e8f..7164fc8a1bae 100644 --- a/crates/project_model/src/cargo_workspace.rs +++ b/crates/project_model/src/cargo_workspace.rs @@ -96,6 +96,8 @@ pub struct CargoConfig { pub unset_test_crates: UnsetTestCrates, pub wrap_rustc_in_build_scripts: bool, + + pub build_script_packages: Vec, } impl CargoConfig { diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 958ff1fcee1f..825b661d1173 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -82,6 +82,9 @@ config_data! { /// Use `RUSTC_WRAPPER=rust-analyzer` when running build scripts to /// avoid compiling unnecessary things. cargo_useRustcWrapperForBuildScripts: bool = "true", + /// List of packages to checked when running build scripts. It is + /// empty by default, which checks all packages in the workspace. + cargo_buildScriptPackagesToCheck: Vec = "[]", /// Do not activate the `default` feature. cargo_noDefaultFeatures: bool = "false", /// Compilation target (target triple). @@ -803,6 +806,7 @@ impl Config { rustc_source, unset_test_crates: UnsetTestCrates::Only(self.data.cargo_unsetTest.clone()), wrap_rustc_in_build_scripts: self.data.cargo_useRustcWrapperForBuildScripts, + build_script_packages: self.data.cargo_buildScriptPackagesToCheck.clone(), } } diff --git a/editors/code/package.json b/editors/code/package.json index b7bc60a3b8b9..23869e0ff15c 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -481,6 +481,14 @@ "default": true, "type": "boolean" }, + "rust-analyzer.cargo.buildScriptPackagesToCheck": { + "markdownDescription": "List of packages to checked when running build scripts.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, "rust-analyzer.cargo.noDefaultFeatures": { "markdownDescription": "Do not activate the `default` feature.", "default": false,