@@ -276,65 +276,62 @@ impl Client {
276276 .expect("language server not yet initialized!")
277277 }
278278
279− #[inline] // TODO inline?
279+ /// Client has to be initialized otherwise this function panics
280+ #[inline]
280281 pub fn supports_feature(&self, feature: LanguageServerFeature) -> bool {
281− let capabilities = match self.capabilities.get() {
282− Some(capabilities) => capabilities,
283− None => return false, // not initialized, TODO unwrap/expect instead?
284− };
282+ let capabilities = self.capabilities();
283+
284+ use lsp::*;
285285 match feature {
286286 LanguageServerFeature::Format => matches!(
287287 capabilities.document_formatting_provider,
288− Some(lsp::OneOf::Left(true) | lsp::OneOf::Right(_))
288+ Some(OneOf::Left(true) | OneOf::Right(_))
289289 ),
290290 LanguageServerFeature::GotoDeclaration => matches!(
291291 capabilities.declaration_provider,
292292 Some(
293− lsp::DeclarationCapability::Simple(true)
294− | lsp::DeclarationCapability::RegistrationOptions(_)
295− | lsp::DeclarationCapability::Options(_),
293+ DeclarationCapability::Simple(true)
294+ | DeclarationCapability::RegistrationOptions(_)
295+ | DeclarationCapability::Options(_),
296296 )
297297 ),
298298 LanguageServerFeature::GotoDefinition => matches!(
299299 capabilities.definition_provider,
300− Some(lsp::OneOf::Left(true) | lsp::OneOf::Right(_))
300+ Some(OneOf::Left(true) | OneOf::Right(_))
301301 ),
302302 LanguageServerFeature::GotoTypeDefinition => matches!(
303303 capabilities.type_definition_provider,
304304 Some(
305− lsp::TypeDefinitionProviderCapability::Simple(true)
306− | lsp::TypeDefinitionProviderCapability::Options(_),
305+ TypeDefinitionProviderCapability::Simple(true)
306+ | TypeDefinitionProviderCapability::Options(_),
307307 )
308308 ),
309309 LanguageServerFeature::GotoReference => matches!(
310310 capabilities.references_provider,
311− Some(lsp::OneOf::Left(true) | lsp::OneOf::Right(_))
311+ Some(OneOf::Left(true) | OneOf::Right(_))
312312 ),
313313 LanguageServerFeature::GotoImplementation => matches!(
314314 capabilities.implementation_provider,
315315 Some(
316− lsp::ImplementationProviderCapability::Simple(true)
317− | lsp::ImplementationProviderCapability::Options(_),
316+ ImplementationProviderCapability::Simple(true)
317+ | ImplementationProviderCapability::Options(_),
318318 )
319319 ),
320320 LanguageServerFeature::SignatureHelp => capabilities.signature_help_provider.is_some(),
321321 LanguageServerFeature::Hover => matches!(
322322 capabilities.hover_provider,
323− Some(
324− lsp::HoverProviderCapability::Simple(true)
325− | lsp::HoverProviderCapability::Options(_),
326− )
323+ Some(HoverProviderCapability::Simple(true) | HoverProviderCapability::Options(_),)
327324 ),
328325 LanguageServerFeature::DocumentHighlight => matches!(
329326 capabilities.document_highlight_provider,
330− Some(lsp::OneOf::Left(true) | lsp::OneOf::Right(_))
327+ Some(OneOf::Left(true) | OneOf::Right(_))
331328 ),
332329 LanguageServerFeature::Completion => capabilities.completion_provider.is_some(),
333330 LanguageServerFeature::CodeAction => matches!(
334331 capabilities.code_action_provider,
335332 Some(
336− lsp::CodeActionProviderCapability::Simple(true)
337− | lsp::CodeActionProviderCapability::Options(_),
333+ CodeActionProviderCapability::Simple(true)
334+ | CodeActionProviderCapability::Options(_),
338335 )
339336 ),
340337 LanguageServerFeature::WorkspaceCommand => {
@@ -342,23 +339,20 @@ impl Client {
342339 }
343340 LanguageServerFeature::DocumentSymbols => matches!(
344341 capabilities.document_symbol_provider,
345− Some(lsp::OneOf::Left(true) | lsp::OneOf::Right(_))
342+ Some(OneOf::Left(true) | OneOf::Right(_))
346343 ),
347344 LanguageServerFeature::WorkspaceSymbols => matches!(
348345 capabilities.workspace_symbol_provider,
349− Some(lsp::OneOf::Left(true) | lsp::OneOf::Right(_))
346+ Some(OneOf::Left(true) | OneOf::Right(_))
350347 ),
351348 LanguageServerFeature::Diagnostics => true, // there's no extra server capability
352349 LanguageServerFeature::RenameSymbol => matches!(
353350 capabilities.rename_provider,
354− Some(lsp::OneOf::Left(true)) | Some(lsp::OneOf::Right(_))
351+ Some(OneOf::Left(true)) | Some(OneOf::Right(_))
355352 ),
356353 LanguageServerFeature::InlayHints => matches!(
357354 capabilities.inlay_hint_provider,
358− Some(
359− lsp::OneOf::Left(true)
360− | lsp::OneOf::Right(lsp::InlayHintServerCapabilities::Options(_))
361− )
355+ Some(OneOf::Left(true) | OneOf::Right(InlayHintServerCapabilities::Options(_)))
362356 ),
363357 }
364358 }