rust-analyzer
rust-analyzer copied to clipboard
Opening a project of a workspace checks the whole workspace
I have a workspace which contains a large number of crates.
Say I need to do the following, in that order:
- Update lib L
- Fix crate A to new interface of lib L
- Fix crate B to new interface of lib L
(A and B do not depend on each other)
When I try to completely update crate A, I can't see warnings and in general I get errors from project B, which I haven't fixed yet. This is due to rust-analyzer watching the whole workspace, even though I have only opened the root of A, and the Cargo.toml
at the root of my folder is that of A.
I would expect that the current behaviour only happens when I open my workspace folder, and that when I open a single project it doesn't try to build the whole workspace, allowing me to completely fix a crate before moving to the next.
This would also have other benefits:
- Performance: my workspace being very large, I rarely work on all projects at once so I would gain time and space by not building all of it
- Feature flags testing: a global
cargo check
does not behave the same way as individual checks: when running a workspace check, all feature flags required in any crate of the workspace are enabled for every crate of the workspace, while when running a crate check, only the flags required for that specific crate are enabled.
#2792 may be another solution to the first part (though I'm not sure how it would behave with the warnings), but it doesn't do anything for the "other benefits".
The current workaround is to set checOnSave.overrideCommand
to a cargo command which checks only a specific package.
What's the original command and how should I set it so that it checks in the root of my project ? (I wouldn't want to remove any other important parameters)
Original one is cargo check --workspace --message-format=json
I tried setting:
{
"rust-analyzer.checkOnSave.overrideCommand": [
"cargo",
"check",
"--message-format=json"
]
}
and it seems to still check the whole workspace. :(
That’s the base command, yeah, you need to add -p some-package no top of it to narrow it to a single package
Oh that's awful, I'd have to change everytime I open a project :(
I'm trying to make this work with extraArgs
but I can't seem to do so (while it does work with https://github.com/rust-analyzer/rust-analyzer/issues/3975#issuecomment-615272400):
{
"rust-analyzer.checkOnSave.extraArgs": [
"-p",
"some_crate",
],
"rust-analyzer.cargo.allFeatures": true
}
seems to still check the whole workspace.
That’s the base command, yeah, you need to add -p some-package no top of it to narrow it to a single package
So maybe a wrapper script to infer the current project and add the -p
? I'm going to give that a try.
So maybe a wrapper script to infer the current project and add the
-p
? I'm going to give that a try.
Alas, I can find no way to detect the package since the cwd is the workspace...