From 953073a679dfe8ae4aff86e8a9bff680d14a5523 Mon Sep 17 00:00:00 2001
From: Michael Davis <mcarsondavis@gmail.com>
Date: Wed, 26 Jul 2023 10:26:56 -0500
Subject: [PATCH] highlighted_code_block: Take input text as &str

This removes a handful of allocations for functions calling into the
function, which is nice because the prompt may call this function on
every keypress.
---
 helix-term/src/ui/lsp.rs      | 4 ++--
 helix-term/src/ui/markdown.rs | 6 +++---
 helix-term/src/ui/prompt.rs   | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/helix-term/src/ui/lsp.rs b/helix-term/src/ui/lsp.rs
index 44050aa1..880df6d8 100644
--- a/helix-term/src/ui/lsp.rs
+++ b/helix-term/src/ui/lsp.rs
@@ -62,7 +62,7 @@ impl Component for SignatureHelp {
         });
 
         let sig_text = crate::ui::markdown::highlighted_code_block(
-            self.signature.clone(),
+            &self.signature,
             &self.language,
             Some(&cx.editor.theme),
             Arc::clone(&self.config_loader),
@@ -109,7 +109,7 @@ impl Component for SignatureHelp {
         let max_text_width = (viewport.0 - PADDING).min(120);
 
         let signature_text = crate::ui::markdown::highlighted_code_block(
-            self.signature.clone(),
+            &self.signature,
             &self.language,
             None,
             Arc::clone(&self.config_loader),
diff --git a/helix-term/src/ui/markdown.rs b/helix-term/src/ui/markdown.rs
index cb2abf68..1433381d 100644
--- a/helix-term/src/ui/markdown.rs
+++ b/helix-term/src/ui/markdown.rs
@@ -17,7 +17,7 @@ use helix_view::{
     Theme,
 };
 
-fn styled_multiline_text<'a>(text: String, style: Style) -> Text<'a> {
+fn styled_multiline_text<'a>(text: &str, style: Style) -> Text<'a> {
     let spans: Vec<_> = text
         .lines()
         .map(|line| Span::styled(line.to_string(), style))
@@ -27,7 +27,7 @@ fn styled_multiline_text<'a>(text: String, style: Style) -> Text<'a> {
 }
 
 pub fn highlighted_code_block<'a>(
-    text: String,
+    text: &str,
     language: &str,
     theme: Option<&Theme>,
     config_loader: Arc<syntax::Loader>,
@@ -267,7 +267,7 @@ impl Markdown {
                             CodeBlockKind::Indented => "",
                         };
                         let tui_text = highlighted_code_block(
-                            text.to_string(),
+                            &text,
                             language,
                             theme,
                             Arc::clone(&self.config_loader),
diff --git a/helix-term/src/ui/prompt.rs b/helix-term/src/ui/prompt.rs
index f376b9c9..1352f493 100644
--- a/helix-term/src/ui/prompt.rs
+++ b/helix-term/src/ui/prompt.rs
@@ -476,7 +476,7 @@ impl Prompt {
             }
         } else if let Some((language, loader)) = self.language.as_ref() {
             let mut text: ui::text::Text = crate::ui::markdown::highlighted_code_block(
-                self.line.clone(),
+                &self.line,
                 language,
                 Some(&cx.editor.theme),
                 loader.clone(),