From a03cfa49268d3938b55ceff046d04a75de8972b9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 1 Jul 2020 16:42:14 +0200 Subject: [PATCH] Automatically reload project on config change --- crates/ra_project_model/src/project_json.rs | 6 +++--- crates/rust-analyzer/src/config.rs | 2 +- crates/rust-analyzer/src/reload.rs | 5 ++++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/crates/ra_project_model/src/project_json.rs b/crates/ra_project_model/src/project_json.rs index 9fe1e2dcb79..b0fe0933358 100644 --- a/crates/ra_project_model/src/project_json.rs +++ b/crates/ra_project_model/src/project_json.rs @@ -10,7 +10,7 @@ use stdx::split_delim; /// Roots and crates that compose this Rust project. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Eq, PartialEq)] pub struct ProjectJson { pub(crate) roots: Vec, pub(crate) crates: Vec, @@ -18,14 +18,14 @@ pub struct ProjectJson { /// A root points to the directory which contains Rust crates. rust-analyzer watches all files in /// all roots. Roots might be nested. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Eq, PartialEq)] pub struct Root { pub(crate) path: AbsPathBuf, } /// A crate points to the root module of a crate and lists the dependencies of the crate. This is /// useful in creating the crate graph. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Eq, PartialEq)] pub struct Crate { pub(crate) root_module: AbsPathBuf, pub(crate) edition: Edition, diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 6b17ce18ba0..6c311648a9d 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -44,7 +44,7 @@ pub struct Config { pub root_path: AbsPathBuf, } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Eq, PartialEq)] pub enum LinkedProject { ProjectManifest(ProjectManifest), InlineJsonProject(ProjectJson), diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs index ec71f8b2918..0c1fd1b8b5b 100644 --- a/crates/rust-analyzer/src/reload.rs +++ b/crates/rust-analyzer/src/reload.rs @@ -19,11 +19,14 @@ pub(crate) fn update_configuration(&mut self, config: Config) { if self.config.lru_capacity != old_config.lru_capacity { self.analysis_host.update_lru_capacity(old_config.lru_capacity); } - if self.config.flycheck != old_config.flycheck { + if self.config.linked_projects != old_config.linked_projects { + self.reload() + } else if self.config.flycheck != old_config.flycheck { self.reload_flycheck(); } } pub(crate) fn reload(&mut self) { + log::info!("reloading projects: {:?}", self.config.linked_projects); let workspaces = { if self.config.linked_projects.is_empty() && self.config.notifications.cargo_toml_not_found