diff options
| author | Aleksey Kladov <aleksey.kladov@gmail.com> | 2022-01-01 17:26:54 +0300 |
|---|---|---|
| committer | Aleksey Kladov <aleksey.kladov@gmail.com> | 2022-01-01 17:26:54 +0300 |
| commit | b9417f348398894f974c787e6029a1272149f245 (patch) | |
| tree | ef5bafd623e09490e4a020e51cb59d8e12f214c6 | |
| parent | 3d63abf1d868218613f33dc59968d3671f7f14a8 (diff) | |
| download | rust-b9417f348398894f974c787e6029a1272149f245.tar.gz rust-b9417f348398894f974c787e6029a1272149f245.zip | |
feat: correctly fallback to notify if the clinet-side file watching is not supported
| -rw-r--r-- | crates/rust-analyzer/src/config.rs | 5 | ||||
| -rw-r--r-- | 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()), - ] - }) - }) - .map(|glob_pattern| lsp_types::FileSystemWatcher { - glob_pattern, - kind: None, + 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()), + ] }) - .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::request::RegisterCapability>( - 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::request::RegisterCapability>( + lsp_types::RegistrationParams { registrations: vec![registration] }, + |_, _| (), + ); } let mut change = Change::new(); |
