From 8a685fa52a73c16ff27db33c565a263f0de87668 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 16 Mar 2023 10:30:22 +0100 Subject: [PATCH] Use `LanguageRegistry::workspace_configuration` everywhere --- crates/project/src/project.rs | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 43c61079bfd79b1e4166fb25d24c0a1cf1f676a4..20422a8b5936f59fa65009cff9a5ebbf28005acd 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -37,7 +37,6 @@ use lsp::{ MarkedString, }; use lsp_command::*; -use parking_lot::Mutex; use postage::watch; use rand::prelude::*; use search::SearchQuery; @@ -95,7 +94,6 @@ pub struct Project { language_servers: HashMap, language_server_ids: HashMap<(WorktreeId, LanguageServerName), usize>, language_server_statuses: BTreeMap, - language_server_settings: Arc>, last_workspace_edits_by_language_server: HashMap, next_language_server_id: usize, client: Arc, @@ -441,7 +439,6 @@ impl Project { language_server_ids: Default::default(), language_server_statuses: Default::default(), last_workspace_edits_by_language_server: Default::default(), - language_server_settings: Default::default(), buffers_being_formatted: Default::default(), next_language_server_id: 0, nonce: StdRng::from_entropy().gen(), @@ -504,7 +501,6 @@ impl Project { }), language_servers: Default::default(), language_server_ids: Default::default(), - language_server_settings: Default::default(), language_server_statuses: response .language_servers .into_iter() @@ -1843,18 +1839,14 @@ impl Project { languages: Arc, cx: &mut ModelContext, ) -> Task<()> { - let mut languages_changed = languages.subscribe(); let (mut settings_changed_tx, mut settings_changed_rx) = watch::channel(); + let _ = postage::stream::Stream::try_recv(&mut settings_changed_rx); + let settings_observation = cx.observe_global::(move |_, _| { *settings_changed_tx.borrow_mut() = (); }); cx.spawn_weak(|this, mut cx| async move { - loop { - futures::select_biased! { - _ = languages_changed.next().fuse() => {}, - _ = settings_changed_rx.next().fuse() => {} - } - + while let Some(_) = settings_changed_rx.next().await { let workspace_config = cx.update(|cx| languages.workspace_configuration(cx)).await; if let Some(this) = this.upgrade(&cx) { this.read_with(&cx, |this, _| { @@ -2001,13 +1993,13 @@ impl Project { language_server .on_request::({ + let languages = languages.clone(); move |params, mut cx| { let languages = languages.clone(); async move { let workspace_config = cx .update(|cx| languages.workspace_configuration(cx)) .await; - Ok(params .items .into_iter() @@ -2096,6 +2088,16 @@ impl Project { }) .detach(); + let workspace_config = + cx.update(|cx| languages.workspace_configuration(cx)).await; + language_server + .notify::( + lsp::DidChangeConfigurationParams { + settings: workspace_config, + }, + ) + .ok(); + this.update(&mut cx, |this, cx| { // If the language server for this key doesn't match the server id, don't store the // server. Which will cause it to be dropped, killing the process @@ -2128,13 +2130,6 @@ impl Project { progress_tokens: Default::default(), }, ); - language_server - .notify::( - lsp::DidChangeConfigurationParams { - settings: this.language_server_settings.lock().clone(), - }, - ) - .ok(); if let Some(project_id) = this.remote_id() { this.client