diff --git a/crates/project/src/project_tree/server_tree.rs b/crates/project/src/project_tree/server_tree.rs index eb6496db32..c222b68a2b 100644 --- a/crates/project/src/project_tree/server_tree.rs +++ b/crates/project/src/project_tree/server_tree.rs @@ -286,6 +286,20 @@ impl LanguageServerTree { )) }) .collect::>(); + // After starting all the language servers, reorder them to reflect the desired order + // based on the settings. + // + // This is done, in part, to ensure that language servers loaded at different points + // (e.g., native vs extension) still end up in the right order at the end, rather than + // it being based on which language server happened to be loaded in first. + self.languages.reorder_language_servers( + &language_name, + adapters_with_settings + .keys() + .map(|wrapper| wrapper.0.clone()) + .collect(), + ); + adapters_with_settings }