Use LanguageServerName in more places (#18167)

This pushes the new LanguageServerName type to more places.

As both languages and language servers were identified by Arc<str>, it
was
sometimes hard to tell which was intended.

Release Notes:

- N/A
This commit is contained in:
Conrad Irwin 2024-09-20 18:51:34 -06:00 committed by GitHub
parent 743feb98bc
commit 4f227fd3bf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 150 additions and 85 deletions

View file

@ -99,7 +99,7 @@ pub struct LanguageSettings {
/// special tokens:
/// - `"!<language_server_id>"` - A language server ID prefixed with a `!` will be disabled.
/// - `"..."` - A placeholder to refer to the **rest** of the registered language servers for this language.
pub language_servers: Vec<Arc<str>>,
pub language_servers: Vec<String>,
/// Controls whether inline completions are shown immediately (true)
/// or manually by triggering `editor::ShowInlineCompletion` (false).
pub show_inline_completions: bool,
@ -137,22 +137,24 @@ impl LanguageSettings {
}
pub(crate) fn resolve_language_servers(
configured_language_servers: &[Arc<str>],
configured_language_servers: &[String],
available_language_servers: &[LanguageServerName],
) -> Vec<LanguageServerName> {
let (disabled_language_servers, enabled_language_servers): (Vec<Arc<str>>, Vec<Arc<str>>) =
configured_language_servers.iter().partition_map(
|language_server| match language_server.strip_prefix('!') {
Some(disabled) => Either::Left(disabled.into()),
None => Either::Right(language_server.clone()),
},
);
let (disabled_language_servers, enabled_language_servers): (
Vec<LanguageServerName>,
Vec<LanguageServerName>,
) = configured_language_servers.iter().partition_map(
|language_server| match language_server.strip_prefix('!') {
Some(disabled) => Either::Left(LanguageServerName(disabled.to_string().into())),
None => Either::Right(LanguageServerName(language_server.clone().into())),
},
);
let rest = available_language_servers
.iter()
.filter(|&available_language_server| {
!disabled_language_servers.contains(&available_language_server.0)
&& !enabled_language_servers.contains(&available_language_server.0)
!disabled_language_servers.contains(&available_language_server)
&& !enabled_language_servers.contains(&available_language_server)
})
.cloned()
.collect::<Vec<_>>();
@ -160,10 +162,10 @@ impl LanguageSettings {
enabled_language_servers
.into_iter()
.flat_map(|language_server| {
if language_server.as_ref() == Self::REST_OF_LANGUAGE_SERVERS {
if language_server.0.as_ref() == Self::REST_OF_LANGUAGE_SERVERS {
rest.clone()
} else {
vec![LanguageServerName(language_server.clone())]
vec![language_server.clone()]
}
})
.collect::<Vec<_>>()
@ -295,7 +297,7 @@ pub struct LanguageSettingsContent {
///
/// Default: ["..."]
#[serde(default)]
pub language_servers: Option<Vec<Arc<str>>>,
pub language_servers: Option<Vec<String>>,
/// Controls whether inline completions are shown immediately (true)
/// or manually by triggering `editor::ShowInlineCompletion` (false).
///
@ -1165,7 +1167,7 @@ mod tests {
names
.iter()
.copied()
.map(|name| LanguageServerName(name.into()))
.map(|name| LanguageServerName(name.to_string().into()))
.collect::<Vec<_>>()
}