summaryrefslogtreecommitdiff
path: root/helix-lsp/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-lsp/src/lib.rs')
-rw-r--r--helix-lsp/src/lib.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs
index 76748136..13ac32ff 100644
--- a/helix-lsp/src/lib.rs
+++ b/helix-lsp/src/lib.rs
@@ -58,6 +58,36 @@ pub mod util {
use super::*;
use helix_core::{Range, Rope, Transaction};
+ /// Converts a diagnostic in the document to [`lsp::Diagnostic`].
+ ///
+ /// Panics when [`pos_to_lsp_pos`] would for an invalid range on the diagnostic.
+ pub fn diagnostic_to_lsp_diagnostic(
+ doc: &Rope,
+ diag: &helix_core::diagnostic::Diagnostic,
+ offset_encoding: OffsetEncoding,
+ ) -> lsp::Diagnostic {
+ use helix_core::diagnostic::Severity::*;
+
+ let range = Range::new(diag.range.start, diag.range.end);
+ let severity = diag.severity.map(|s| match s {
+ Hint => lsp::DiagnosticSeverity::HINT,
+ Info => lsp::DiagnosticSeverity::INFORMATION,
+ Warning => lsp::DiagnosticSeverity::WARNING,
+ Error => lsp::DiagnosticSeverity::ERROR,
+ });
+
+ // TODO: add support for Diagnostic.data
+ lsp::Diagnostic::new(
+ range_to_lsp_range(doc, range, offset_encoding),
+ severity,
+ None,
+ None,
+ diag.message.to_owned(),
+ None,
+ None,
+ )
+ }
+
/// Converts [`lsp::Position`] to a position in the document.
///
/// Returns `None` if position exceeds document length or an operation overflows.