fix: detect crlf as end of line in regex prompt

pull/13692/head
b-van-b 2025-06-05 23:40:21 +08:00
parent f6878f62f7
commit 1d305a3bd7
2 changed files with 64 additions and 1 deletions

View File

@ -1170,6 +1170,68 @@ mod test {
);
}
#[test]
fn test_select_on_matches_crlf() {
let r = Rope::from_str("This\r\nString\r\n\r\ncontains multiple\r\nlines");
let s = r.slice(..);
let start_of_line = rope::RegexBuilder::new()
.syntax(rope::Config::new().multi_line(true).crlf(true))
.build(r"^")
.unwrap();
let end_of_line = rope::RegexBuilder::new()
.syntax(rope::Config::new().multi_line(true).crlf(true))
.build(r"$")
.unwrap();
// line without ending
assert_eq!(
select_on_matches(s, &Selection::single(0, 4), &start_of_line),
Some(Selection::single(0, 0))
);
assert_eq!(
select_on_matches(s, &Selection::single(0, 4), &end_of_line),
None
);
// line with ending
assert_eq!(
select_on_matches(s, &Selection::single(0, 5), &start_of_line),
Some(Selection::single(0, 0))
);
assert_eq!(
select_on_matches(s, &Selection::single(0, 5), &end_of_line),
Some(Selection::single(4, 4))
);
// line with start of next line
assert_eq!(
select_on_matches(s, &Selection::single(0, 7), &start_of_line),
Some(Selection::new(
smallvec![Range::point(0), Range::point(6)],
0
))
);
assert_eq!(
select_on_matches(s, &Selection::single(0, 6), &end_of_line),
Some(Selection::single(4, 4))
);
// multiple lines
assert_eq!(
select_on_matches(
s,
&Selection::single(0, s.len_chars()),
&rope::RegexBuilder::new()
.syntax(rope::Config::new().multi_line(true).crlf(true))
.build(r"^[a-z ]*$")
.unwrap()
),
Some(Selection::new(
smallvec![Range::point(14), Range::new(16, 33), Range::new(35, 40)],
0
))
);
}
#[test]
fn test_line_range() {
let r = Rope::from_str("\r\nHi\r\nthere!");

View File

@ -127,7 +127,8 @@ pub fn raw_regex_prompt(
.syntax(
rope::Config::new()
.case_insensitive(case_insensitive)
.multi_line(true),
.multi_line(true)
.crlf(true),
)
.build(input)
{