diff --git a/book/src/editor.md b/book/src/editor.md index ae5f8af4..4d390820 100644 --- a/book/src/editor.md +++ b/book/src/editor.md @@ -56,6 +56,7 @@ | `popup-border` | Draw border around `popup`, `menu`, `all`, or `none` | `none` | | `indent-heuristic` | How the indentation for a newly inserted line is computed: `simple` just copies the indentation level from the previous line, `tree-sitter` computes the indentation based on the syntax tree and `hybrid` combines both approaches. If the chosen heuristic is not available, a different one will be used as a fallback (the fallback order being `hybrid` -> `tree-sitter` -> `simple`). | `hybrid` | `jump-label-alphabet` | The characters that are used to generate two character jump labels. Characters at the start of the alphabet are used first. | `"abcdefghijklmnopqrstuvwxyz"` +| `enable-diagnostics` | Whether to show diagnostics, such as inline diagnostics and overlay diagnostics | `true` | | `end-of-line-diagnostics` | Minimum severity of diagnostics to render at the end of the line. Set to `disable` to disable entirely. Refer to the setting about `inline-diagnostics` for more details | "disable" | `clipboard-provider` | Which API to use for clipboard interaction. One of `pasteboard` (MacOS), `wayland`, `x-clip`, `x-sel`, `win-32-yank`, `termux`, `tmux`, `windows`, `termcode`, `none`, or a custom command set. | Platform and environment specific. | diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index c99d72a8..5f064841 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -186,19 +186,24 @@ impl EditorView { primary_cursor, }); } - let width = view.inner_width(doc); let config = doc.config.load(); - let enable_cursor_line = view - .diagnostics_handler - .show_cursorline_diagnostics(doc, view.id); - let inline_diagnostic_config = config.inline_diagnostics.prepare(width, enable_cursor_line); - decorations.add_decoration(InlineDiagnostics::new( - doc, - theme, - primary_cursor, - inline_diagnostic_config, - config.end_of_line_diagnostics, - )); + + if config.enable_diagnostics { + let width = view.inner_width(doc); + let enable_cursor_line = view + .diagnostics_handler + .show_cursorline_diagnostics(doc, view.id); + let inline_diagnostic_config = + config.inline_diagnostics.prepare(width, enable_cursor_line); + decorations.add_decoration(InlineDiagnostics::new( + doc, + theme, + primary_cursor, + inline_diagnostic_config, + config.end_of_line_diagnostics, + )); + } + render_document( surface, inner, @@ -224,7 +229,8 @@ impl EditorView { } } - if config.inline_diagnostics.disabled() + if config.enable_diagnostics + && config.inline_diagnostics.disabled() && config.end_of_line_diagnostics == DiagnosticFilter::Disable { Self::render_diagnostics(doc, view, inner, surface, theme); diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index 4e34be91..b521800a 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -358,6 +358,7 @@ pub struct Config { deserialize_with = "deserialize_alphabet" )] pub jump_label_alphabet: Vec, + pub enable_diagnostics: bool, /// Display diagnostic below the line they occur. pub inline_diagnostics: InlineDiagnosticsConfig, pub end_of_line_diagnostics: DiagnosticFilter, @@ -1005,6 +1006,7 @@ impl Default for Config { popup_border: PopupBorderConfig::None, indent_heuristic: IndentationHeuristic::default(), jump_label_alphabet: ('a'..='z').collect(), + enable_diagnostics: true, inline_diagnostics: InlineDiagnosticsConfig::default(), end_of_line_diagnostics: DiagnosticFilter::Disable, clipboard_provider: ClipboardProvider::default(), diff --git a/helix-view/src/handlers/diagnostics.rs b/helix-view/src/handlers/diagnostics.rs index 2b8ff632..a9fbbf8f 100644 --- a/helix-view/src/handlers/diagnostics.rs +++ b/helix-view/src/handlers/diagnostics.rs @@ -105,7 +105,7 @@ impl DiagnosticsHandler { .store(self.generation.get(), atomic::Ordering::Relaxed); } pub fn show_cursorline_diagnostics(&self, doc: &Document, view: ViewId) -> bool { - if !self.active { + if !self.active || !doc.config.load().enable_diagnostics { return false; } let cursor_line = doc