Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-lsp/src/client.rs')
| -rw-r--r-- | helix-lsp/src/client.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs index afb3b3a5..ebc619e2 100644 --- a/helix-lsp/src/client.rs +++ b/helix-lsp/src/client.rs @@ -372,6 +372,7 @@ impl Client { Some(OneOf::Left(true) | OneOf::Right(_)) ), LanguageServerFeature::Diagnostics => true, // there's no extra server capability + LanguageServerFeature::PullDiagnostics => capabilities.diagnostic_provider.is_some(), LanguageServerFeature::RenameSymbol => matches!( capabilities.rename_provider, Some(OneOf::Left(true)) | Some(OneOf::Right(_)) @@ -602,6 +603,9 @@ impl Client { did_rename: Some(true), ..Default::default() }), + diagnostic: Some(lsp::DiagnosticWorkspaceClientCapabilities { + refresh_support: Some(true), + }), ..Default::default() }), text_document: Some(lsp::TextDocumentClientCapabilities { @@ -679,6 +683,10 @@ impl Client { }), ..Default::default() }), + diagnostic: Some(lsp::DiagnosticClientCapabilities { + dynamic_registration: Some(false), + related_document_support: Some(true), + }), publish_diagnostics: Some(lsp::PublishDiagnosticsClientCapabilities { version_support: Some(true), tag_support: Some(lsp::TagSupport { @@ -1229,6 +1237,32 @@ impl Client { Some(self.call::<lsp::request::RangeFormatting>(params)) } + pub fn text_document_diagnostic( + &self, + text_document: lsp::TextDocumentIdentifier, + previous_result_id: Option<String>, + ) -> Option<impl Future<Output = Result<lsp::DocumentDiagnosticReportResult>>> { + let capabilities = self.capabilities(); + + // Return early if the server does not support pull diagnostic. + let identifier = match capabilities.diagnostic_provider.as_ref()? { + lsp::DiagnosticServerCapabilities::Options(cap) => cap.identifier.clone(), + lsp::DiagnosticServerCapabilities::RegistrationOptions(cap) => { + cap.diagnostic_options.identifier.clone() + } + }; + + let params = lsp::DocumentDiagnosticParams { + text_document, + identifier, + previous_result_id, + work_done_progress_params: lsp::WorkDoneProgressParams::default(), + partial_result_params: lsp::PartialResultParams::default(), + }; + + Some(self.call::<lsp::request::DocumentDiagnosticRequest>(params)) + } + pub fn text_document_document_highlight( &self, text_document: lsp::TextDocumentIdentifier, |