Skip to content

Commit ea347b0

Browse files
authored
project: Handle capabilities parse for more methods when registerOptions doesn't exist (#36984)
Closes #36938 Follow up to #36554 When `registerOptions` is `None`, we should fall back instead of skipping capability registration. 1. `Option<OneOf<bool, T>>`, where `T` is struct – handled in the attached PR ✅ 2. `Option<T>`, where `T` is an enum that can be `Simple(bool)` or `Options(S)` – this PR ✅ 3. `Option<T>`, where `T` is struct – we should fall back to default values for these options ⚠️ Release Notes: - Fixed an issue where hover popovers would not appear in language servers like Java.
1 parent a038970 commit ea347b0

File tree

1 file changed

+27
-31
lines changed

1 file changed

+27
-31
lines changed

crates/project/src/lsp_store.rs

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11778,17 +11778,15 @@ impl LspStore {
1177811778
notify_server_capabilities_updated(&server, cx);
1177911779
}
1178011780
"textDocument/codeAction" => {
11781-
if let Some(options) = reg
11782-
.register_options
11783-
.map(serde_json::from_value)
11784-
.transpose()?
11785-
{
11786-
server.update_capabilities(|capabilities| {
11787-
capabilities.code_action_provider =
11788-
Some(lsp::CodeActionProviderCapability::Options(options));
11789-
});
11790-
notify_server_capabilities_updated(&server, cx);
11791-
}
11781+
let options = parse_register_capabilities(reg)?;
11782+
let provider = match options {
11783+
OneOf::Left(value) => lsp::CodeActionProviderCapability::Simple(value),
11784+
OneOf::Right(caps) => caps,
11785+
};
11786+
server.update_capabilities(|capabilities| {
11787+
capabilities.code_action_provider = Some(provider);
11788+
});
11789+
notify_server_capabilities_updated(&server, cx);
1179211790
}
1179311791
"textDocument/definition" => {
1179411792
let options = parse_register_capabilities(reg)?;
@@ -11810,16 +11808,15 @@ impl LspStore {
1181011808
}
1181111809
}
1181211810
"textDocument/hover" => {
11813-
if let Some(caps) = reg
11814-
.register_options
11815-
.map(serde_json::from_value)
11816-
.transpose()?
11817-
{
11818-
server.update_capabilities(|capabilities| {
11819-
capabilities.hover_provider = Some(caps);
11820-
});
11821-
notify_server_capabilities_updated(&server, cx);
11822-
}
11811+
let options = parse_register_capabilities(reg)?;
11812+
let provider = match options {
11813+
OneOf::Left(value) => lsp::HoverProviderCapability::Simple(value),
11814+
OneOf::Right(caps) => caps,
11815+
};
11816+
server.update_capabilities(|capabilities| {
11817+
capabilities.hover_provider = Some(provider);
11818+
});
11819+
notify_server_capabilities_updated(&server, cx);
1182311820
}
1182411821
"textDocument/signatureHelp" => {
1182511822
if let Some(caps) = reg
@@ -11904,16 +11901,15 @@ impl LspStore {
1190411901
}
1190511902
}
1190611903
"textDocument/documentColor" => {
11907-
if let Some(caps) = reg
11908-
.register_options
11909-
.map(serde_json::from_value)
11910-
.transpose()?
11911-
{
11912-
server.update_capabilities(|capabilities| {
11913-
capabilities.color_provider = Some(caps);
11914-
});
11915-
notify_server_capabilities_updated(&server, cx);
11916-
}
11904+
let options = parse_register_capabilities(reg)?;
11905+
let provider = match options {
11906+
OneOf::Left(value) => lsp::ColorProviderCapability::Simple(value),
11907+
OneOf::Right(caps) => caps,
11908+
};
11909+
server.update_capabilities(|capabilities| {
11910+
capabilities.color_provider = Some(provider);
11911+
});
11912+
notify_server_capabilities_updated(&server, cx);
1191711913
}
1191811914
_ => log::warn!("unhandled capability registration: {reg:?}"),
1191911915
}

0 commit comments

Comments
 (0)