aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaž Hrastnik2020-09-13 14:12:14 +0000
committerBlaž Hrastnik2020-09-13 14:12:14 +0000
commit0427acd18cc06adec49783818107d1d5e2afc2ab (patch)
tree575a8d89d7805c4fae2c8c71310130bcbe08fbf1
parent2027f69eae5a8b7d25a4613dfddc382f01bcdb78 (diff)
Avoid collect() by accepting iterators into Transaction::change.
-rw-r--r--helix-core/src/commands.rs2
-rw-r--r--helix-core/src/transaction.rs8
2 files changed, 6 insertions, 4 deletions
diff --git a/helix-core/src/commands.rs b/helix-core/src/commands.rs
index 3bebd7b4..8dc817da 100644
--- a/helix-core/src/commands.rs
+++ b/helix-core/src/commands.rs
@@ -155,7 +155,7 @@ pub fn open_below(state: &mut State, _count: usize) {
0,
);
- let transaction = Transaction::change(state, changes.collect()).with_selection(selection);
+ let transaction = Transaction::change(state, changes).with_selection(selection);
transaction.apply(state);
// TODO: need to store into history if successful
diff --git a/helix-core/src/transaction.rs b/helix-core/src/transaction.rs
index 12ed523e..4ecc575a 100644
--- a/helix-core/src/transaction.rs
+++ b/helix-core/src/transaction.rs
@@ -353,8 +353,10 @@ impl Transaction {
}
/// Generate a transaction from a set of changes.
- // TODO: take an owned iter instead of Vec
- pub fn change(state: &State, changes: Vec<Change>) -> Self {
+ pub fn change<I>(state: &State, changes: I) -> Self
+ where
+ I: IntoIterator<Item = Change> + ExactSizeIterator,
+ {
let len = state.doc.len_chars();
let mut acc = Vec::with_capacity(2 * changes.len() + 1);
@@ -381,7 +383,7 @@ impl Transaction {
where
F: Fn(&SelectionRange) -> Change,
{
- Self::change(state, state.selection.ranges.iter().map(f).collect())
+ Self::change(state, state.selection.ranges.iter().map(f))
}
/// Insert text at each selection head.