Add language_servers setting for customizing which language servers run (#10911)

This PR adds a new `language_servers` setting underneath the language
settings.


This setting controls which of the available language servers for a
given language will run.

The `language_servers` setting is an array of strings. Each item in the
array must be either:

- A language server ID (e.g., `"rust-analyzer"`,
`"typescript-language-server"`, `"eslint"`, etc.) denoting a language
server that should be enabled.
- A language server ID prefixed with a `!` (e.g., `"!rust-analyzer"`,
`"!typescript-language-server"`, `"!eslint"`, etc.) denoting a language
server that should be disabled.
- A `"..."` placeholder, which will be replaced by the remaining
available language servers that haven't already been mentioned in the
array.

For example, to enable the Biome language server in place of the default
TypeScript language server, you would add the following to your
settings:

```json
{
  "languages": {
    "TypeScript": {
      "language_servers": ["biome", "!typescript-language-server", "..."]
    }
  }
}
```

More details can be found in #10906.

Release Notes:

- Added `language_servers` setting to language settings for customizing
which language server(s) run for a given language.
This commit is contained in:
Marshall Bowers 2024-04-23 19:38:57 -04:00 committed by GitHub
parent 68a1ad89bb
commit cf67fc9055
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 162 additions and 10 deletions

View file

@ -3060,7 +3060,20 @@ impl Project {
return;
}
for adapter in self.languages.clone().lsp_adapters(&language) {
let available_lsp_adapters = self.languages.clone().lsp_adapters(&language);
let available_language_servers = available_lsp_adapters
.iter()
.map(|lsp_adapter| lsp_adapter.name.clone())
.collect::<Vec<_>>();
let enabled_language_servers =
settings.customized_language_servers(&available_language_servers);
for adapter in available_lsp_adapters {
if !enabled_language_servers.contains(&adapter.name) {
continue;
}
self.start_language_server(worktree, adapter.clone(), language.clone(), cx);
}
}