diff options
Diffstat (limited to 'helix-lsp/src/lib.rs')
-rw-r--r-- | helix-lsp/src/lib.rs | 30 |
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. |