-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
When running build scripts in the workspace, --workspace flag is used unconditionally. Even with rust-analyzer.cargo.noDefaultFeatures=true specified, this flag causes crates marked optional = true to be compiled (the feature for the crate is not turned on).
cargo help check says this:
--workspace
Check all members in the workspace.
Currently, the only workaround is to specify the following:
"rust-analyzer.cargo.runBuildScripts": false,
"rust-analyzer.procMacro.enable": falseHowever, this is a hack and a really big hammer which stops all uses of build scripts in the workspace. If --workspace flag is removed, the optional dependencies are ignored (for unspecified features) as expected.
I believe this behavior is problematic especially if rust-analyzer.cargo.noDefaultFeatures is set to true. rust-analyzer.cargo.noDefaultFeatures=true would be a good hint that the user doesn't want to compile everything in the workspace, but only some of the features.
Use case
In our internal project, a project has windows and linux specific dependencies. Some crates are linux only, they have build scripts which only work on linux. They are specified in Cargo.toml behind feature configuration. As long as the relevant feature is not turned on, those crates are not compiled. The dependencies are path specific and marked optional = true. Using rust-analyzer on this workspace will call cargo check --workspace which runs build scripts for dependencies including optional ones. This makes rust-analyzer status always broken.