aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/configuration.md1
-rw-r--r--helix-term/src/ui/statusline.rs44
-rw-r--r--helix-view/src/editor.rs3
3 files changed, 48 insertions, 0 deletions
diff --git a/book/src/configuration.md b/book/src/configuration.md
index 8713c3ff..e4854cda 100644
--- a/book/src/configuration.md
+++ b/book/src/configuration.md
@@ -102,6 +102,7 @@ The following statusline elements can be configured:
| `total-line-numbers` | The total line numbers of the opened file |
| `file-type` | The type of the opened file |
| `diagnostics` | The number of warnings and/or errors |
+| `workspace-diagnostics` | The number of warnings and/or errors on workspace |
| `selections` | The number of active selections |
| `primary-selection-length` | The number of characters currently in primary selection |
| `position` | The cursor position |
diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs
index 47bb1129..6ea0570d 100644
--- a/helix-term/src/ui/statusline.rs
+++ b/helix-term/src/ui/statusline.rs
@@ -1,4 +1,5 @@
use helix_core::{coords_at_pos, encoding, Position};
+use helix_lsp::lsp::DiagnosticSeverity;
use helix_view::{
document::{Mode, SCRATCH_BUFFER_NAME},
graphics::Rect,
@@ -141,6 +142,7 @@ where
helix_view::editor::StatusLineElement::FileLineEnding => render_file_line_ending,
helix_view::editor::StatusLineElement::FileType => render_file_type,
helix_view::editor::StatusLineElement::Diagnostics => render_diagnostics,
+ helix_view::editor::StatusLineElement::WorkspaceDiagnostics => render_workspace_diagnostics,
helix_view::editor::StatusLineElement::Selections => render_selections,
helix_view::editor::StatusLineElement::PrimarySelectionLength => {
render_primary_selection_length
@@ -245,6 +247,48 @@ where
}
}
+fn render_workspace_diagnostics<F>(context: &mut RenderContext, write: F)
+where
+ F: Fn(&mut RenderContext, String, Option<Style>) + Copy,
+{
+ let (warnings, errors) =
+ context
+ .editor
+ .diagnostics
+ .values()
+ .flatten()
+ .fold((0, 0), |mut counts, diag| {
+ match diag.severity {
+ Some(DiagnosticSeverity::WARNING) => counts.0 += 1,
+ Some(DiagnosticSeverity::ERROR) | None => counts.1 += 1,
+ _ => {}
+ }
+ counts
+ });
+
+ if warnings > 0 || errors > 0 {
+ write(context, format!(" {} ", "W"), None);
+ }
+
+ if warnings > 0 {
+ write(
+ context,
+ "●".to_string(),
+ Some(context.editor.theme.get("warning")),
+ );
+ write(context, format!(" {} ", warnings), None);
+ }
+
+ if errors > 0 {
+ write(
+ context,
+ "●".to_string(),
+ Some(context.editor.theme.get("error")),
+ );
+ write(context, format!(" {} ", errors), None);
+ }
+}
+
fn render_selections<F>(context: &mut RenderContext, write: F)
where
F: Fn(&mut RenderContext, String, Option<Style>) + Copy,
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index 213141ff..4e3a69a2 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -325,6 +325,9 @@ pub enum StatusLineElement {
/// A summary of the number of errors and warnings
Diagnostics,
+ /// A summary of the number of errors and warnings on file and workspace
+ WorkspaceDiagnostics,
+
/// The number of selections (cursors)
Selections,