diff --git a/crates/project/src/project_tree/server_tree.rs b/crates/project/src/project_tree/server_tree.rs index eb6496db323a7b0b2fbb7c632fe21c4c589c4c92..c222b68a2bfce2f6fc03dc99c0351beeed231966 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 }