on master help sign in
minor: Simplify some command code
fe11ae2Blaž Hrastnik
helix-term/src/commands.rs+17−33
@@ -780,11 +780,7 @@ fn trim_selections(cx: &mut Context) {
780 let mut end = range.to();
780 let mut end = range.to();
781 start = movement::skip_while(text, start, |x| x.is_whitespace()).unwrap_or(start);
781 start = movement::skip_while(text, start, |x| x.is_whitespace()).unwrap_or(start);
782 end = movement::backwards_skip_while(text, end, |x| x.is_whitespace()).unwrap_or(end);
782 end = movement::backwards_skip_while(text, end, |x| x.is_whitespace()).unwrap_or(end);
783− if range.anchor < range.head {
784− Some(Range::new(start, end))
783+ Some(Range::new(start, end).with_direction(range.direction()))
785− } else {
786− Some(Range::new(end, start))
787− }
788 })
784 })
789 .collect();
785 .collect();
790
786
@@ -1656,11 +1652,7 @@ fn search_impl(
1656
1652
1657 // Determine range direction based on the primary range
1653 // Determine range direction based on the primary range
1658 let primary = selection.primary();
1654 let primary = selection.primary();
1659− let range = if primary.head < primary.anchor {
1655+ let range = Range::new(start, end).with_direction(primary.direction());
1660− Range::new(end, start)
1661− } else {
1662− Range::new(start, end)
1663− };
1664
1656
1665 let selection = match movement {
1657 let selection = match movement {
1666 Movement::Extend => selection.clone().push(range),
1658 Movement::Extend => selection.clone().push(range),
@@ -2093,11 +2085,7 @@ fn extend_to_line_bounds(cx: &mut Context) {
2093 let start = text.line_to_char(start_line);
2085 let start = text.line_to_char(start_line);
2094 let end = text.line_to_char((end_line + 1).min(text.len_lines()));
2086 let end = text.line_to_char((end_line + 1).min(text.len_lines()));
2095
2087
2096− if range.anchor <= range.head {
2097− Range::new(start, end)
2088+ Range::new(start, end).with_direction(range.direction())
2098− } else {
2099− Range::new(end, start)
2100− }
2101 }),
2089 }),
2102 );
2090 );
2103}
2091}
@@ -2134,11 +2122,7 @@ fn shrink_to_line_bounds(cx: &mut Context) {
2134 end = text.line_to_char(end_line);
2122 end = text.line_to_char(end_line);
2135 }
2123 }
2136
2124
2137− if range.anchor <= range.head {
2138− Range::new(start, end)
2125+ Range::new(start, end).with_direction(range.direction())
2139− } else {
2140− Range::new(end, start)
2141− }
2142 }),
2126 }),
2143 );
2127 );
2144}
2128}
@@ -2753,15 +2737,15 @@ fn goto_line(cx: &mut Context) {
2753fn goto_line_impl(editor: &mut Editor, count: Option<NonZeroUsize>) {
2737fn goto_line_impl(editor: &mut Editor, count: Option<NonZeroUsize>) {
2754 if let Some(count) = count {
2738 if let Some(count) = count {
2755 let (view, doc) = current!(editor);
2739 let (view, doc) = current!(editor);
2740+ let text = doc.text().slice(..);
2756− let max_line = if doc.text().line(doc.text().len_lines() - 1).len_chars() == 0 {
2741+ let max_line = if text.line(text.len_lines() - 1).len_chars() == 0 {
2757 // If the last line is blank, don't jump to it.
2742 // If the last line is blank, don't jump to it.
2758− doc.text().len_lines().saturating_sub(2)
2743+ text.len_lines().saturating_sub(2)
2759 } else {
2744 } else {
2760− doc.text().len_lines() - 1
2745+ text.len_lines() - 1
2761 };
2746 };
2762 let line_idx = std::cmp::min(count.get() - 1, max_line);
2747 let line_idx = std::cmp::min(count.get() - 1, max_line);
2763− let text = doc.text().slice(..);
2764− let pos = doc.text().line_to_char(line_idx);
2748+ let pos = text.line_to_char(line_idx);
2765 let selection = doc
2749 let selection = doc
2766 .selection(view.id)
2750 .selection(view.id)
2767 .clone()
2751 .clone()
@@ -2774,14 +2758,14 @@ fn goto_line_impl(editor: &mut Editor, count: Option<NonZeroUsize>) {
2774
2758
2775fn goto_last_line(cx: &mut Context) {
2759fn goto_last_line(cx: &mut Context) {
2776 let (view, doc) = current!(cx.editor);
2760 let (view, doc) = current!(cx.editor);
2761+ let text = doc.text().slice(..);
2777− let line_idx = if doc.text().line(doc.text().len_lines() - 1).len_chars() == 0 {
2762+ let line_idx = if text.line(text.len_lines() - 1).len_chars() == 0 {
2778 // If the last line is blank, don't jump to it.
2763 // If the last line is blank, don't jump to it.
2779− doc.text().len_lines().saturating_sub(2)
2764+ text.len_lines().saturating_sub(2)
2780 } else {
2765 } else {
2781− doc.text().len_lines() - 1
2766+ text.len_lines() - 1
2782 };
2767 };
2783− let text = doc.text().slice(..);
2784− let pos = doc.text().line_to_char(line_idx);
2768+ let pos = text.line_to_char(line_idx);
2785 let selection = doc
2769 let selection = doc
2786 .selection(view.id)
2770 .selection(view.id)
2787 .clone()
2771 .clone()
@@ -3823,7 +3807,7 @@ fn format_selections(cx: &mut Context) {
3823 apply_transaction(&transaction, doc, view);
3807 apply_transaction(&transaction, doc, view);
3824}
3808}
3825
3809
3826−fn join_selections_inner(cx: &mut Context, select_space: bool) {
3810+fn join_selections_impl(cx: &mut Context, select_space: bool) {
3827 use movement::skip_while;
3811 use movement::skip_while;
3828 let (view, doc) = current!(cx.editor);
3812 let (view, doc) = current!(cx.editor);
3829 let text = doc.text();
3813 let text = doc.text();
@@ -3902,11 +3886,11 @@ fn keep_or_remove_selections_impl(cx: &mut Context, remove: bool) {
3902}
3886}
3903
3887
3904fn join_selections(cx: &mut Context) {
3888fn join_selections(cx: &mut Context) {
3905− join_selections_inner(cx, false)
3889+ join_selections_impl(cx, false)
3906}
3890}
3907
3891
3908fn join_selections_space(cx: &mut Context) {
3892fn join_selections_space(cx: &mut Context) {
3909− join_selections_inner(cx, true)
3893+ join_selections_impl(cx, true)
3910}
3894}
3911
3895
3912fn keep_selections(cx: &mut Context) {
3896fn keep_selections(cx: &mut Context) {