fix(commands): extend_line to proper line when count and current line selected (#5288)

pull/5351/head
Gabriel Dinner-David 2 years ago committed by GitHub
parent c9ed42cdec
commit 1b1755240d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2053,16 +2053,10 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) {
let selection = doc.selection(view.id).clone().transform(|range| { let selection = doc.selection(view.id).clone().transform(|range| {
let (start_line, end_line) = range.line_range(text.slice(..)); let (start_line, end_line) = range.line_range(text.slice(..));
let start = text.line_to_char(match extend { let start = text.line_to_char(start_line);
Extend::Above => start_line.saturating_sub(count - 1),
Extend::Below => start_line,
});
let end = text.line_to_char( let end = text.line_to_char(
match extend { (end_line + 1) // newline of end_line
Extend::Above => end_line + 1, // the start of next line .min(text.len_lines()),
Extend::Below => end_line + count,
}
.min(text.len_lines()),
); );
// extend to previous/next line if current line is selected // extend to previous/next line if current line is selected
@ -2076,8 +2070,11 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) {
} }
} else { } else {
match extend { match extend {
Extend::Above => (end, start), Extend::Above => (end, text.line_to_char(start_line.saturating_sub(count - 1))),
Extend::Below => (start, end), Extend::Below => (
start,
text.line_to_char((end_line + count).min(text.len_lines())),
),
} }
}; };

@ -311,3 +311,46 @@ async fn test_undo_redo() -> anyhow::Result<()> {
Ok(()) Ok(())
} }
#[tokio::test(flavor = "multi_thread")]
async fn test_extend_line() -> anyhow::Result<()> {
// extend with line selected then count
test((
platform_line(indoc! {"\
#[l|]#orem
ipsum
dolor
"})
.as_str(),
"x2x",
platform_line(indoc! {"\
#[lorem
ipsum
dolor
|]#
"})
.as_str(),
))
.await?;
// extend with count on partial selection
test((
platform_line(indoc! {"\
#[l|]#orem
ipsum
"})
.as_str(),
"2x",
platform_line(indoc! {"\
#[lorem
ipsum
|]#
"})
.as_str(),
))
.await?;
Ok(())
}

Loading…
Cancel
Save