aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/application.rs
diff options
context:
space:
mode:
authorFalco Hirschenberger2022-06-30 09:16:18 +0000
committerGitHub2022-06-30 09:16:18 +0000
commited89f8897eab84bf7614a718d5d1e3ec5c57086c (patch)
tree347bd0db6509b1c4a6e88f6ca7e461dc8a923215 /helix-term/src/application.rs
parent94fc41a41920fc705f01637e7902f06a1c32d998 (diff)
Add workspace and document diagnostics picker (#2013)
* Add workspace and document diagnostics picker fixes #1891 * Fix some of @archseer's annotations * Add From<&Spans> impl for String * More descriptive parameter names. * Adding From<Cow<str>> impls for Span and Spans * Add new keymap entries to docs * Avoid some clones * Fix api change * Update helix-term/src/application.rs Co-authored-by: Bjorn Ove Hay Andersen <bjrnove@gmail.com> * Fix a clippy hint * Sort diagnostics first by URL and then by severity. * Sort diagnostics first by URL and then by severity. * Ignore missing lsp severity entries * Add truncated filepath * Typo * Strip cwd from paths and use url-path without schema * Make tests a doctest * Better variable names Co-authored-by: Falco Hirschenberger <falco.hirschenberger@itwm.fraunhofer.de> Co-authored-by: Bjorn Ove Hay Andersen <bjrnove@gmail.com>
Diffstat (limited to 'helix-term/src/application.rs')
-rw-r--r--helix-term/src/application.rs28
1 files changed, 21 insertions, 7 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 48e9c275..23f4610f 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -495,7 +495,7 @@ impl Application {
));
}
}
- Notification::PublishDiagnostics(params) => {
+ Notification::PublishDiagnostics(mut params) => {
let path = params.uri.to_file_path().unwrap();
let doc = self.editor.document_by_path_mut(&path);
@@ -505,12 +505,9 @@ impl Application {
let diagnostics = params
.diagnostics
- .into_iter()
+ .iter()
.filter_map(|diagnostic| {
- use helix_core::{
- diagnostic::{Range, Severity::*},
- Diagnostic,
- };
+ use helix_core::diagnostic::{Diagnostic, Range, Severity::*};
use lsp::DiagnosticSeverity;
let language_server = doc.language_server().unwrap();
@@ -561,7 +558,7 @@ impl Application {
Some(Diagnostic {
range: Range { start, end },
line: diagnostic.range.start.line as usize,
- message: diagnostic.message,
+ message: diagnostic.message.clone(),
severity,
// code
// source
@@ -571,6 +568,23 @@ impl Application {
doc.set_diagnostics(diagnostics);
}
+
+ // Sort diagnostics first by URL and then by severity.
+ // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
+ params.diagnostics.sort_unstable_by(|a, b| {
+ if let (Some(a), Some(b)) = (a.severity, b.severity) {
+ a.partial_cmp(&b).unwrap()
+ } else {
+ std::cmp::Ordering::Equal
+ }
+ });
+
+ // Insert the original lsp::Diagnostics here because we may have no open document
+ // for diagnosic message and so we can't calculate the exact position.
+ // When using them later in the diagnostics picker, we calculate them on-demand.
+ self.editor
+ .diagnostics
+ .insert(params.uri, params.diagnostics);
}
Notification::ShowMessage(params) => {
log::warn!("unhandled window/showMessage: {:?}", params);