mirror of
https://github.com/ilyakooo0/helix.git
synced 2024-09-11 16:07:00 +03:00
Get rid of a bunch of clones.
This commit is contained in:
parent
f9348d77ec
commit
f098166571
@ -10,47 +10,23 @@
|
||||
|
||||
pub fn move_char_left(state: &mut State, count: usize) {
|
||||
// TODO: use a transaction
|
||||
let selection = state.move_selection(
|
||||
// TODO: remove the clone here
|
||||
state.selection.clone(),
|
||||
Direction::Backward,
|
||||
Granularity::Character,
|
||||
count,
|
||||
);
|
||||
let selection = state.move_selection(Direction::Backward, Granularity::Character, count);
|
||||
state.selection = selection;
|
||||
}
|
||||
|
||||
pub fn move_char_right(state: &mut State, count: usize) {
|
||||
// TODO: use a transaction
|
||||
state.selection = state.move_selection(
|
||||
// TODO: remove the clone here
|
||||
state.selection.clone(),
|
||||
Direction::Forward,
|
||||
Granularity::Character,
|
||||
count,
|
||||
);
|
||||
state.selection = state.move_selection(Direction::Forward, Granularity::Character, count);
|
||||
}
|
||||
|
||||
pub fn move_line_up(state: &mut State, count: usize) {
|
||||
// TODO: use a transaction
|
||||
state.selection = state.move_selection(
|
||||
// TODO: remove the clone here
|
||||
state.selection.clone(),
|
||||
Direction::Backward,
|
||||
Granularity::Line,
|
||||
count,
|
||||
);
|
||||
state.selection = state.move_selection(Direction::Backward, Granularity::Line, count);
|
||||
}
|
||||
|
||||
pub fn move_line_down(state: &mut State, count: usize) {
|
||||
// TODO: use a transaction
|
||||
state.selection = state.move_selection(
|
||||
// TODO: remove the clone here
|
||||
state.selection.clone(),
|
||||
Direction::Forward,
|
||||
Granularity::Line,
|
||||
count,
|
||||
);
|
||||
state.selection = state.move_selection(Direction::Forward, Granularity::Line, count);
|
||||
}
|
||||
|
||||
// avoid select by default by having a visual mode switch that makes movements into selects
|
||||
@ -66,7 +42,6 @@ pub fn insert_mode(state: &mut State, _count: usize) {
|
||||
|
||||
state.selection = state
|
||||
.selection
|
||||
.clone()
|
||||
.transform(|range| Range::new(range.to(), range.from()))
|
||||
}
|
||||
|
||||
@ -76,7 +51,7 @@ pub fn append_mode(state: &mut State, _count: usize) {
|
||||
|
||||
// TODO: as transaction
|
||||
let text = &state.doc.slice(..);
|
||||
state.selection = state.selection.clone().transform(|range| {
|
||||
state.selection = state.selection.transform(|range| {
|
||||
// TODO: to() + next char
|
||||
Range::new(range.from(), next_grapheme_boundary(text, range.to()))
|
||||
})
|
||||
|
@ -211,11 +211,14 @@ pub fn single(anchor: usize, head: usize) -> Self {
|
||||
}
|
||||
|
||||
/// Takes a closure and maps each selection over the closure.
|
||||
pub fn transform<F>(self, f: F) -> Self
|
||||
pub fn transform<F>(&self, f: F) -> Self
|
||||
where
|
||||
F: Fn(Range) -> Range,
|
||||
{
|
||||
Self::new(self.ranges.into_iter().map(f).collect(), self.primary_index)
|
||||
Self::new(
|
||||
self.ranges.iter().copied().map(f).collect(),
|
||||
self.primary_index,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,6 @@ pub fn move_pos(
|
||||
|
||||
pub fn move_selection(
|
||||
&self,
|
||||
sel: Selection,
|
||||
dir: Direction,
|
||||
granularity: Granularity,
|
||||
count: usize,
|
||||
@ -123,7 +122,7 @@ pub fn move_selection(
|
||||
// TODO: move all selections according to normal cursor move semantics by collapsing it
|
||||
// into cursors and moving them vertically
|
||||
|
||||
let ranges = sel.ranges.into_iter().map(|range| {
|
||||
let ranges = self.selection.ranges.iter().map(|range| {
|
||||
// let pos = if !range.is_empty() {
|
||||
// // if selection already exists, bump it to the start or end of current select first
|
||||
// if dir == Direction::Backward {
|
||||
@ -137,23 +136,22 @@ pub fn move_selection(
|
||||
SelectionRange::new(pos, pos)
|
||||
});
|
||||
|
||||
Selection::new(ranges.collect(), sel.primary_index)
|
||||
Selection::new(ranges.collect(), self.selection.primary_index)
|
||||
// TODO: update selection in state via transaction
|
||||
}
|
||||
|
||||
pub fn extend_selection(
|
||||
&self,
|
||||
sel: Selection,
|
||||
dir: Direction,
|
||||
granularity: Granularity,
|
||||
count: usize,
|
||||
) -> Selection {
|
||||
let ranges = sel.ranges.into_iter().map(|range| {
|
||||
let ranges = self.selection.ranges.iter().map(|range| {
|
||||
let pos = self.move_pos(range.head, dir, granularity, count);
|
||||
SelectionRange::new(range.anchor, pos)
|
||||
});
|
||||
|
||||
Selection::new(ranges.collect(), sel.primary_index)
|
||||
Selection::new(ranges.collect(), self.selection.primary_index)
|
||||
// TODO: update selection in state via transaction
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user