Unnamed repository; edit this file 'description' to name the repository.
Remove special handling of line ending characters in selection replacement (#10786)
* Remove special-casing of line ending characters in selection replacement * Refactor line ending handling and integration test to address code review comments
Chris Pyles 2024-06-10
parent aa1630a · commit 03813bb
-rw-r--r--helix-term/src/commands.rs16
-rw-r--r--helix-term/tests/test/commands.rs14
2 files changed, 18 insertions, 12 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 9b614067..5fc83235 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -26,7 +26,7 @@ use helix_core::{
history::UndoKind,
increment, indent,
indent::IndentStyle,
- line_ending::{get_line_ending_of_str, line_end_char_index, str_is_line_ending},
+ line_ending::{get_line_ending_of_str, line_end_char_index},
match_brackets,
movement::{self, move_vertically_visual, Direction},
object, pos_at_coords,
@@ -1605,19 +1605,11 @@ fn replace(cx: &mut Context) {
if let Some(ch) = ch {
let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
if !range.is_empty() {
- let text: String =
+ let text: Tendril =
RopeGraphemes::new(doc.text().slice(range.from()..range.to()))
- .map(|g| {
- let cow: Cow<str> = g.into();
- if str_is_line_ending(&cow) {
- cow
- } else {
- ch.into()
- }
- })
+ .map(|_g| ch)
.collect();
-
- (range.from(), range.to(), Some(text.into()))
+ (range.from(), range.to(), Some(text))
} else {
// No change.
(range.from(), range.to(), None)
diff --git a/helix-term/tests/test/commands.rs b/helix-term/tests/test/commands.rs
index 1c5c6196..7f41a221 100644
--- a/helix-term/tests/test/commands.rs
+++ b/helix-term/tests/test/commands.rs
@@ -722,5 +722,19 @@ fn foo() {
))
.await?;
+ test((
+ indoc! {"\
+ #[a
+ b
+ c
+ d
+ e|]#
+ f
+ "},
+ "s\\n<ret>r,",
+ "a#[,|]#b#(,|)#c#(,|)#d#(,|)#e\nf\n",
+ ))
+ .await?;
+
Ok(())
}