From 34277f0c476b17405d15d3f4fb36cddb56558b46 Mon Sep 17 00:00:00 2001 From: kirawi <67773714+kirawi@users.noreply.github.com> Date: Thu, 15 Feb 2024 21:05:34 -0500 Subject: [PATCH] yank diagnostic command --- helix-term/src/commands.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index d44f477b73764..d2004012fffbf 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -388,6 +388,7 @@ impl MappableCommand { yank_main_selection_to_clipboard, "Yank main selection to clipboard", yank_joined_to_primary_clipboard, "Join and yank selections to primary clipboard", yank_main_selection_to_primary_clipboard, "Yank main selection to primary clipboard", + yank_diagnostic, "Yank diagnostic to register or clipboard by default", replace_with_yanked, "Replace with yanked text", replace_selections_with_clipboard, "Replace selections by clipboard content", replace_selections_with_primary_clipboard, "Replace selections by primary clipboard", @@ -5519,6 +5520,32 @@ fn increment_impl(cx: &mut Context, increment_direction: IncrementDirection) { } } +fn yank_diagnostic(cx: &mut Context) { + let (view, doc) = current_ref!(cx.editor); + let primary = doc.selection(view.id).primary(); + + let default_sep = doc.line_ending.as_str(); + let diag = doc + .diagnostics() + .iter() + .filter(|d| primary.overlaps(&helix_core::Range::new(d.range.start, d.range.end))) + .map(|d| d.message.clone()) + .fold(String::new(), |mut acc, fragment| { + if !acc.is_empty() { + acc.push_str(default_sep); + } + acc.push_str(&fragment); + acc + }); + let reg = cx.register.unwrap_or('+'); + match cx.editor.registers.write(reg, vec![diag]) { + Ok(_) => cx + .editor + .set_status(format!("Yanked diagnostic(s) to register {reg}")), + Err(err) => cx.editor.set_error(err.to_string()), + } +} + fn record_macro(cx: &mut Context) { if let Some((reg, mut keys)) = cx.editor.macro_recording.take() { // Remove the keypress which ends the recording