diff options
author | Alexis (Poliorcetics) Bourget | 2022-10-08 18:06:23 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2022-10-11 06:47:11 +0000 |
commit | b58899bc8e0f339fd83a1740a896fcc62976f7a7 (patch) | |
tree | 9718f9576c9f890171e41c6a9636a43651d024d4 | |
parent | 28cb89eadb67b6526b026105919a772ce8e726a3 (diff) |
fix: remove unneeded allocations when calling helix_view::Info::new
-rw-r--r-- | helix-term/src/commands.rs | 8 | ||||
-rw-r--r-- | helix-view/src/info.rs | 33 |
2 files changed, 24 insertions, 17 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 754e4473..ad84c85c 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -4455,13 +4455,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) { (" ", "... or any character acting as a pair"), ]; - cx.editor.autoinfo = Some(Info::new( - title, - help_text - .into_iter() - .map(|(col1, col2)| (col1.to_string(), col2.to_string())) - .collect(), - )); + cx.editor.autoinfo = Some(Info::new(title, &help_text)); } fn surround_add(cx: &mut Context) { diff --git a/helix-view/src/info.rs b/helix-view/src/info.rs index 5ad6a60c..3080cf8e 100644 --- a/helix-view/src/info.rs +++ b/helix-view/src/info.rs @@ -16,7 +16,11 @@ pub struct Info { } impl Info { - pub fn new(title: &str, body: Vec<(String, String)>) -> Self { + pub fn new<T, U>(title: &str, body: &[(T, U)]) -> Self + where + T: AsRef<str>, + U: AsRef<str>, + { if body.is_empty() { return Self { title: title.to_string(), @@ -26,11 +30,21 @@ impl Info { }; } - let item_width = body.iter().map(|(item, _)| item.width()).max().unwrap(); + let item_width = body + .iter() + .map(|(item, _)| item.as_ref().width()) + .max() + .unwrap(); let mut text = String::new(); - for (item, desc) in &body { - let _ = writeln!(text, "{:width$} {}", item, desc, width = item_width); + for (item, desc) in body { + let _ = writeln!( + text, + "{:width$} {}", + item.as_ref(), + desc.as_ref(), + width = item_width + ); } Self { @@ -42,19 +56,19 @@ impl Info { } pub fn from_keymap(title: &str, body: Vec<(&str, BTreeSet<KeyEvent>)>) -> Self { - let body = body + let body: Vec<_> = body .into_iter() .map(|(desc, events)| { let events = events.iter().map(ToString::to_string).collect::<Vec<_>>(); - (events.join(", "), desc.to_string()) + (events.join(", "), desc) }) .collect(); - Self::new(title, body) + Self::new(title, &body) } pub fn from_registers(registers: &Registers) -> Self { - let body = registers + let body: Vec<_> = registers .inner() .iter() .map(|(ch, reg)| { @@ -62,13 +76,12 @@ impl Info { .read() .get(0) .and_then(|s| s.lines().next()) - .map(String::from) .unwrap_or_default(); (ch.to_string(), content) }) .collect(); - let mut infobox = Self::new("Registers", body); + let mut infobox = Self::new("Registers", &body); infobox.width = 30; // copied content could be very long infobox } |