summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-core/src/diagnostic.rs8
-rw-r--r--helix-lsp/src/lib.rs22
-rw-r--r--helix-term/src/application.rs19
3 files changed, 45 insertions, 4 deletions
diff --git a/helix-core/src/diagnostic.rs b/helix-core/src/diagnostic.rs
index 48a68dc0..da199ac9 100644
--- a/helix-core/src/diagnostic.rs
+++ b/helix-core/src/diagnostic.rs
@@ -29,6 +29,12 @@ pub enum NumberOrString {
String(String),
}
+#[derive(Debug, Clone)]
+pub enum DiagnosticTag {
+ Unnecessary,
+ Deprecated,
+}
+
/// Corresponds to [`lsp_types::Diagnostic`](https://docs.rs/lsp-types/0.91.0/lsp_types/struct.Diagnostic.html)
#[derive(Debug, Clone)]
pub struct Diagnostic {
@@ -37,4 +43,6 @@ pub struct Diagnostic {
pub message: String,
pub severity: Option<Severity>,
pub code: Option<NumberOrString>,
+ pub tags: Option<Vec<DiagnosticTag>>,
+ pub source: Option<String>,
}
diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs
index a39325fa..8c76c4a8 100644
--- a/helix-lsp/src/lib.rs
+++ b/helix-lsp/src/lib.rs
@@ -84,15 +84,33 @@ pub mod util {
None => None,
};
+ let tags = if let Some(ref tags) = diag.tags {
+ let new_tags = tags
+ .iter()
+ .map(|tag| match tag {
+ helix_core::diagnostic::DiagnosticTag::Unnecessary => {
+ lsp::DiagnosticTag::UNNECESSARY
+ }
+ helix_core::diagnostic::DiagnosticTag::Deprecated => {
+ lsp::DiagnosticTag::DEPRECATED
+ }
+ })
+ .collect();
+
+ Some(new_tags)
+ } else {
+ None
+ };
+
// TODO: add support for Diagnostic.data
lsp::Diagnostic::new(
range_to_lsp_range(doc, range, offset_encoding),
severity,
code,
- None,
+ diag.source.clone(),
diag.message.to_owned(),
None,
- None,
+ tags,
)
}
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 7ee5b7f1..496464f0 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -2,7 +2,7 @@ use arc_swap::{access::Map, ArcSwap};
use futures_util::Stream;
use helix_core::{
config::{default_syntax_loader, user_syntax_loader},
- diagnostic::NumberOrString,
+ diagnostic::{DiagnosticTag, NumberOrString},
pos_at_coords, syntax, Selection,
};
use helix_lsp::{lsp, util::lsp_pos_to_pos, LspProgressMap};
@@ -605,13 +605,28 @@ impl Application {
None => None,
};
+ let tags = if let Some(ref tags) = diagnostic.tags {
+ let new_tags = tags.iter().filter_map(|tag| {
+ match *tag {
+ lsp::DiagnosticTag::DEPRECATED => Some(DiagnosticTag::Deprecated),
+ lsp::DiagnosticTag::UNNECESSARY => Some(DiagnosticTag::Unnecessary),
+ _ => None
+ }
+ }).collect();
+
+ Some(new_tags)
+ } else {
+ None
+ };
+
Some(Diagnostic {
range: Range { start, end },
line: diagnostic.range.start.line as usize,
message: diagnostic.message.clone(),
severity,
code,
- // source
+ tags,
+ source: diagnostic.source.clone()
})
})
.collect();