Fix crate IDs when multiple workspaces are loaded #16961
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously, we assumed that the crate numbers in a
rust-project.json
always matched theCrateId
values in the crate graph. This isn't true when there are multiple workspaces, because the crate graphs are merged and theCrateId
values in the merged graph are different.This broke flycheck (see first commit), because we were unable to find the workspace when a file changed, so we ran every single flycheck, producing duplicate compilation errors.
Instead, use the crate root module path to look up the relevant flycheck. This makes
ProjectWorkspace::Json
consistent withProjectWorkspace::Cargo
.Also, define a separate JSON crate number type, to prevent bugs like this happening again.