From fe869e5dc7a8cd6c2c2e3945816bd890956eef3a Mon Sep 17 00:00:00 2001 From: kyfanc Date: Tue, 13 Feb 2024 18:58:53 +0800 Subject: fix lsp config reload (#9415) `syn_loader` was replaced rather than interior value being replace, old value was still being referenced and not updated after `:config-refresh`. By using `ArcSwap` like for `config`, each `.load()` call will return the most updated value. Co-authored-by: kyfan --- helix-lsp/Cargo.toml | 1 + helix-lsp/src/lib.rs | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'helix-lsp') diff --git a/helix-lsp/Cargo.toml b/helix-lsp/Cargo.toml index 2bdd5cfc..4284b052 100644 --- a/helix-lsp/Cargo.toml +++ b/helix-lsp/Cargo.toml @@ -30,3 +30,4 @@ thiserror = "1.0" tokio = { version = "1.36", features = ["rt", "rt-multi-thread", "io-util", "io-std", "time", "process", "macros", "fs", "parking_lot", "sync"] } tokio-stream = "0.1.14" parking_lot = "0.12.1" +arc-swap = "1" diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs index 05764418..c58d967b 100644 --- a/helix-lsp/src/lib.rs +++ b/helix-lsp/src/lib.rs @@ -5,6 +5,7 @@ pub mod jsonrpc; pub mod snippet; mod transport; +use arc_swap::ArcSwap; pub use client::Client; pub use futures_executor::block_on; pub use jsonrpc::Call; @@ -640,14 +641,14 @@ impl Notification { #[derive(Debug)] pub struct Registry { inner: HashMap>>, - syn_loader: Arc, + syn_loader: Arc>, counter: usize, pub incoming: SelectAll>, pub file_event_handler: file_event::Handler, } impl Registry { - pub fn new(syn_loader: Arc) -> Self { + pub fn new(syn_loader: Arc>) -> Self { Self { inner: HashMap::new(), syn_loader, @@ -681,8 +682,8 @@ impl Registry { root_dirs: &[PathBuf], enable_snippets: bool, ) -> Result>> { - let config = self - .syn_loader + let syn_loader = self.syn_loader.load(); + let config = syn_loader .language_server_configs() .get(&name) .ok_or_else(|| anyhow::anyhow!("Language server '{name}' not defined"))?; -- cgit v1.2.3-70-g09d2