diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 84311f9d790bcc401bbe4265bec4ff06587dd1b4..ed02b8de59ec2fa85e5e09571c5d9d423eaed513 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -567,20 +567,25 @@ impl LanguageRegistry { } pub fn workspace_configuration(&self, cx: &mut MutableAppContext) -> Task { - let state = self.state.read(); + let lsp_adapters = { + let state = self.state.read(); + state + .available_languages + .iter() + .filter_map(|l| l.lsp_adapter.clone()) + .chain( + state + .languages + .iter() + .filter_map(|l| l.adapter.as_ref().map(|a| a.adapter.clone())), + ) + .collect::>() + }; + let mut language_configs = Vec::new(); - for language in &state.available_languages { - if let Some(adapter) = language.lsp_adapter.as_ref() { - if let Some(language_config) = adapter.workspace_configuration(cx) { - language_configs.push(language_config); - } - } - } - for language in &state.languages { - if let Some(adapter) = language.lsp_adapter() { - if let Some(language_config) = adapter.workspace_configuration(cx) { - language_configs.push(language_config); - } + for adapter in &lsp_adapters { + if let Some(language_config) = adapter.workspace_configuration(cx) { + language_configs.push(language_config); } }