diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 9bbcce6f6f8b0fea6ad605f2bb6489fa9dcca849..444393f17c204e08c6eeae4b432a5ba8a51b5874 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -4676,12 +4676,21 @@ impl Project { let mut project_transaction = ProjectTransaction::default(); for (buffer, buffer_abs_path) in &buffers_with_paths { - let adapters_and_servers: Vec<_> = project.update(&mut cx, |project, cx| { - project - .language_servers_for_buffer(&buffer.read(cx), cx) - .map(|(adapter, lsp)| (adapter.clone(), lsp.clone())) - .collect() - })?; + let (primary_adapter_and_server, adapters_and_servers) = + project.update(&mut cx, |project, cx| { + let buffer = buffer.read(cx); + + let adapters_and_servers = project + .language_servers_for_buffer(buffer, cx) + .map(|(adapter, lsp)| (adapter.clone(), lsp.clone())) + .collect::>(); + + let primary_adapter = project + .primary_language_server_for_buffer(buffer, cx) + .map(|(adapter, lsp)| (adapter.clone(), lsp.clone())); + + (primary_adapter, adapters_and_servers) + })?; let settings = buffer.update(&mut cx, |buffer, cx| { language_settings(buffer.language(), buffer.file(), cx).clone() @@ -4734,10 +4743,8 @@ impl Project { // Apply language-specific formatting using either the primary language server // or external command. // Except for code actions, which are applied with all connected language servers. - let primary_language_server = adapters_and_servers - .first() - .cloned() - .map(|(_, lsp)| lsp.clone()); + let primary_language_server = + primary_adapter_and_server.map(|(_adapter, server)| server.clone()); let server_and_buffer = primary_language_server .as_ref() .zip(buffer_abs_path.as_ref());