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.rs34
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,