@@ -353,8 +353,10 @@ impl Transaction {
353353 }
354354
355355 /// Generate a transaction from a set of changes.
356− // TODO: take an owned iter instead of Vec
357− pub fn change(state: &State, changes: Vec<Change>) -> Self {
356+ pub fn change<I>(state: &State, changes: I) -> Self
357+ where
358+ I: IntoIterator<Item = Change> + ExactSizeIterator,
359+ {
358360 let len = state.doc.len_chars();
359361 let mut acc = Vec::with_capacity(2 * changes.len() + 1);
360362
@@ -381,7 +383,7 @@ impl Transaction {
381383 where
382384 F: Fn(&SelectionRange) -> Change,
383385 {
384− Self::change(state, state.selection.ranges.iter().map(f).collect())
386+ Self::change(state, state.selection.ranges.iter().map(f))
385387 }
386388
387389 /// Insert text at each selection head.