mirror of https://github.com/helix-editor/helix
fix: remove unneeded allocations when calling helix_view::Info::new
parent
28cb89eadb
commit
b58899bc8e
|
@ -4455,13 +4455,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
|
||||||
(" ", "... or any character acting as a pair"),
|
(" ", "... or any character acting as a pair"),
|
||||||
];
|
];
|
||||||
|
|
||||||
cx.editor.autoinfo = Some(Info::new(
|
cx.editor.autoinfo = Some(Info::new(title, &help_text));
|
||||||
title,
|
|
||||||
help_text
|
|
||||||
.into_iter()
|
|
||||||
.map(|(col1, col2)| (col1.to_string(), col2.to_string()))
|
|
||||||
.collect(),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn surround_add(cx: &mut Context) {
|
fn surround_add(cx: &mut Context) {
|
||||||
|
|
|
@ -16,7 +16,11 @@ pub struct Info {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl 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() {
|
if body.is_empty() {
|
||||||
return Self {
|
return Self {
|
||||||
title: title.to_string(),
|
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();
|
let mut text = String::new();
|
||||||
|
|
||||||
for (item, desc) in &body {
|
for (item, desc) in body {
|
||||||
let _ = writeln!(text, "{:width$} {}", item, desc, width = item_width);
|
let _ = writeln!(
|
||||||
|
text,
|
||||||
|
"{:width$} {}",
|
||||||
|
item.as_ref(),
|
||||||
|
desc.as_ref(),
|
||||||
|
width = item_width
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
@ -42,19 +56,19 @@ impl Info {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_keymap(title: &str, body: Vec<(&str, BTreeSet<KeyEvent>)>) -> Self {
|
pub fn from_keymap(title: &str, body: Vec<(&str, BTreeSet<KeyEvent>)>) -> Self {
|
||||||
let body = body
|
let body: Vec<_> = body
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(desc, events)| {
|
.map(|(desc, events)| {
|
||||||
let events = events.iter().map(ToString::to_string).collect::<Vec<_>>();
|
let events = events.iter().map(ToString::to_string).collect::<Vec<_>>();
|
||||||
(events.join(", "), desc.to_string())
|
(events.join(", "), desc)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
Self::new(title, body)
|
Self::new(title, &body)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_registers(registers: &Registers) -> Self {
|
pub fn from_registers(registers: &Registers) -> Self {
|
||||||
let body = registers
|
let body: Vec<_> = registers
|
||||||
.inner()
|
.inner()
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(ch, reg)| {
|
.map(|(ch, reg)| {
|
||||||
|
@ -62,13 +76,12 @@ impl Info {
|
||||||
.read()
|
.read()
|
||||||
.get(0)
|
.get(0)
|
||||||
.and_then(|s| s.lines().next())
|
.and_then(|s| s.lines().next())
|
||||||
.map(String::from)
|
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
(ch.to_string(), content)
|
(ch.to_string(), content)
|
||||||
})
|
})
|
||||||
.collect();
|
.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.width = 30; // copied content could be very long
|
||||||
infobox
|
infobox
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue