mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 06:41:48 +00:00
fix: Updating settings should not clobber discovered projects
`linkedProjects` is owned by the user's configuration, so when users update this setting, `linkedProjects` is reset. This is problematic when `linkedProjects` also contains projects discovered with `discoverCommand`. The buggy behaviour occurred when: (1) The user configures `discoverCommand` and loads a Rust project. (2) The user changes any setting in VS Code, so rust-analyzer receives `workspace/didChangeConfiguration`. (3) `handle_did_change_configuration` ultimately calls `Client::apply_change_with_sink()`, which updates `config.user_config` and discards any items we added in `linkedProjects`. Instead, separate out `discovered_projects_from_filesystem` and `discovered_projects_from_command` from user configuration, so user settings cannot affect any type of discovered project. This fixes the subtle issue mentioned here: https://github.com/rust-lang/rust-analyzer/pull/17246#issuecomment-2185259122
This commit is contained in:
parent
124c748216
commit
3cf28f1fc6
4 changed files with 86 additions and 62 deletions
|
@ -52,6 +52,15 @@ pub use crate::{
|
|||
};
|
||||
pub use cargo_metadata::Metadata;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ProjectJsonFromCommand {
|
||||
/// The data describing this project, such as its dependencies.
|
||||
pub data: ProjectJsonData,
|
||||
/// The build system specific file that describes this project,
|
||||
/// such as a `my-project/BUCK` file.
|
||||
pub buildfile: AbsPathBuf,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)]
|
||||
pub enum ProjectManifest {
|
||||
ProjectJson(ManifestPath),
|
||||
|
|
|
@ -66,6 +66,8 @@ pub struct ProjectJson {
|
|||
/// e.g. `path/to/sysroot/lib/rustlib/src/rust`
|
||||
pub(crate) sysroot_src: Option<AbsPathBuf>,
|
||||
project_root: AbsPathBuf,
|
||||
/// The path to the rust-project.json file. May be None if this
|
||||
/// data was generated by the discoverConfig command.
|
||||
manifest: Option<ManifestPath>,
|
||||
crates: Vec<Crate>,
|
||||
/// Configuration for CLI commands.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue