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

This commit is contained in:
Gabriel Dinner-David 2022-12-31 07:23:55 -07:00 committed by GitHub
parent c9ed42cdec
commit 1b1755240d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 11 deletions

View file

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

View file

@ -311,3 +311,46 @@ async fn test_undo_redo() -> anyhow::Result<()> {
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(())
}