on master help sign in
Refactor switch_case commands
95cd2c6Gokul Soumya
helix-term/src/commands.rs+19−29
@@ -811,12 +811,25 @@ fn replace(cx: &mut Context) {
811 })
811 })
812}
812}
813
813
814−fn switch_case(cx: &mut Context) {
814+fn switch_case_impl<F>(cx: &mut Context, change_fn: F)
815+where
816+ F: Fn(Cow<str>) -> Tendril,
817+{
815 let (view, doc) = current!(cx.editor);
818 let (view, doc) = current!(cx.editor);
816 let selection = doc.selection(view.id);
819 let selection = doc.selection(view.id);
817 let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
820 let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
818− let text: Tendril = range
819− .fragment(doc.text().slice(..))
821+ let text: Tendril = change_fn(range.fragment(doc.text().slice(..)));
822+
823+ (range.from(), range.to(), Some(text))
824+ });
825+
826+ doc.apply(&transaction, view.id);
827+ doc.append_changes_to_history(view.id);
828+}
829+
830+fn switch_case(cx: &mut Context) {
831+ switch_case_impl(cx, |string| {
832+ string
820 .chars()
833 .chars()
821 .flat_map(|ch| {
834 .flat_map(|ch| {
822 if ch.is_lowercase() {
835 if ch.is_lowercase() {
@@ -827,39 +840,16 @@ fn switch_case(cx: &mut Context) {
827 vec![ch]
840 vec![ch]
828 }
841 }
829 })
842 })
830− .collect();
843+ .collect()
831−
832− (range.from(), range.to(), Some(text))
833 });
844 });
834−
835− doc.apply(&transaction, view.id);
836− doc.append_changes_to_history(view.id);
837}
845}
838
846
839fn switch_to_uppercase(cx: &mut Context) {
847fn switch_to_uppercase(cx: &mut Context) {
840− let (view, doc) = current!(cx.editor);
848+ switch_case_impl(cx, |string| string.to_uppercase().into());
841− let selection = doc.selection(view.id);
842− let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
843− let text: Tendril = range.fragment(doc.text().slice(..)).to_uppercase().into();
844−
845− (range.from(), range.to(), Some(text))
846− });
847−
848− doc.apply(&transaction, view.id);
849− doc.append_changes_to_history(view.id);
850}
849}
851
850
852fn switch_to_lowercase(cx: &mut Context) {
851fn switch_to_lowercase(cx: &mut Context) {
853− let (view, doc) = current!(cx.editor);
852+ switch_case_impl(cx, |string| string.to_lowercase().into());
854− let selection = doc.selection(view.id);
855− let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
856− let text: Tendril = range.fragment(doc.text().slice(..)).to_lowercase().into();
857−
858− (range.from(), range.to(), Some(text))
859− });
860−
861− doc.apply(&transaction, view.id);
862− doc.append_changes_to_history(view.id);
863}
853}
864
854
865pub fn scroll(cx: &mut Context, offset: usize, direction: Direction) {
855pub fn scroll(cx: &mut Context, offset: usize, direction: Direction) {