diff options
author | kyfanc | 2024-02-13 10:58:53 +0000 |
---|---|---|
committer | GitHub | 2024-02-13 10:58:53 +0000 |
commit | fe869e5dc7a8cd6c2c2e3945816bd890956eef3a (patch) | |
tree | ad0b899b482df976caf3cc2f079dc7d0d8a3769f /helix-lsp/src | |
parent | 7934ac77143e69068420556b043dde035255340b (diff) |
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 <kyfan@email>
Diffstat (limited to 'helix-lsp/src')
-rw-r--r-- | helix-lsp/src/lib.rs | 9 |
1 files changed, 5 insertions, 4 deletions
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<LanguageServerName, Vec<Arc<Client>>>, - syn_loader: Arc<helix_core::syntax::Loader>, + syn_loader: Arc<ArcSwap<helix_core::syntax::Loader>>, counter: usize, pub incoming: SelectAll<UnboundedReceiverStream<(usize, Call)>>, pub file_event_handler: file_event::Handler, } impl Registry { - pub fn new(syn_loader: Arc<helix_core::syntax::Loader>) -> Self { + pub fn new(syn_loader: Arc<ArcSwap<helix_core::syntax::Loader>>) -> Self { Self { inner: HashMap::new(), syn_loader, @@ -681,8 +682,8 @@ impl Registry { root_dirs: &[PathBuf], enable_snippets: bool, ) -> Result<Option<Arc<Client>>> { - 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"))?; |