From b9417f348398894f974c787e6029a1272149f245 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 1 Jan 2022 17:26:54 +0300 Subject: [PATCH] feat: correctly fallback to notify if the clinet-side file watching is not supported --- crates/rust-analyzer/src/config.rs | 5 ++- crates/rust-analyzer/src/reload.rs | 57 ++++++++++++++---------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 867f2bd1f0e..818aab35157 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -723,7 +723,10 @@ impl Config { FilesConfig { watcher: match self.data.files_watcher.as_str() { "notify" => FilesWatcher::Notify, - "client" | _ => FilesWatcher::Client, + "client" if self.did_change_watched_files_dynamic_registration() => { + FilesWatcher::Client + } + _ => FilesWatcher::Notify, }, exclude: self.data.files_excludeDirs.iter().map(|it| self.root_path.join(it)).collect(), } diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs index 7ba56971762..b14b3dbcfa9 100644 --- a/crates/rust-analyzer/src/reload.rs +++ b/crates/rust-analyzer/src/reload.rs @@ -241,38 +241,33 @@ impl GlobalState { } if let FilesWatcher::Client = self.config.files().watcher { - if self.config.did_change_watched_files_dynamic_registration() { - let registration_options = lsp_types::DidChangeWatchedFilesRegistrationOptions { - watchers: self - .workspaces - .iter() - .flat_map(|ws| ws.to_roots()) - .filter(|it| it.is_local) - .flat_map(|root| { - root.include.into_iter().flat_map(|it| { - [ - format!("{}/**/*.rs", it.display()), - format!("{}/**/Cargo.toml", it.display()), - format!("{}/**/Cargo.lock", it.display()), - ] - }) + let registration_options = lsp_types::DidChangeWatchedFilesRegistrationOptions { + watchers: self + .workspaces + .iter() + .flat_map(|ws| ws.to_roots()) + .filter(|it| it.is_local) + .flat_map(|root| { + root.include.into_iter().flat_map(|it| { + [ + format!("{}/**/*.rs", it.display()), + format!("{}/**/Cargo.toml", it.display()), + format!("{}/**/Cargo.lock", it.display()), + ] }) - .map(|glob_pattern| lsp_types::FileSystemWatcher { - glob_pattern, - kind: None, - }) - .collect(), - }; - let registration = lsp_types::Registration { - id: "workspace/didChangeWatchedFiles".to_string(), - method: "workspace/didChangeWatchedFiles".to_string(), - register_options: Some(serde_json::to_value(registration_options).unwrap()), - }; - self.send_request::( - lsp_types::RegistrationParams { registrations: vec![registration] }, - |_, _| (), - ); - } + }) + .map(|glob_pattern| lsp_types::FileSystemWatcher { glob_pattern, kind: None }) + .collect(), + }; + let registration = lsp_types::Registration { + id: "workspace/didChangeWatchedFiles".to_string(), + method: "workspace/didChangeWatchedFiles".to_string(), + register_options: Some(serde_json::to_value(registration_options).unwrap()), + }; + self.send_request::( + lsp_types::RegistrationParams { registrations: vec![registration] }, + |_, _| (), + ); } let mut change = Change::new();