mirror of
https://github.com/helix-editor/helix.git
synced 2025-04-06 12:27:42 +03:00
feat(command): select_all_siblings
This commit is contained in:
parent
cf9b88f9bd
commit
87c4161732
4 changed files with 232 additions and 3 deletions
helix-term/tests/test/commands
|
@ -450,3 +450,154 @@ async fn test_smart_tab_move_parent_node_end() -> anyhow::Result<()> {
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn select_all_siblings() -> anyhow::Result<()> {
|
||||
let tests = vec![
|
||||
// basic tests
|
||||
(
|
||||
indoc! {r##"
|
||||
let foo = bar(#[a|]#, b, c);
|
||||
"##},
|
||||
"<A-a>",
|
||||
indoc! {r##"
|
||||
let foo = bar(#[a|]#, #(b|)#, #(c|)#);
|
||||
"##},
|
||||
),
|
||||
(
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[1|]#,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
];
|
||||
"##},
|
||||
"<A-a>",
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[1|]#,
|
||||
#(2|)#,
|
||||
#(3|)#,
|
||||
#(4|)#,
|
||||
#(5|)#,
|
||||
];
|
||||
"##},
|
||||
),
|
||||
// direction is preserved
|
||||
(
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[|1]#,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
];
|
||||
"##},
|
||||
"<A-a>",
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[|1]#,
|
||||
#(|2)#,
|
||||
#(|3)#,
|
||||
#(|4)#,
|
||||
#(|5)#,
|
||||
];
|
||||
"##},
|
||||
),
|
||||
// can't pick any more siblings - selection stays the same
|
||||
(
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[1|]#,
|
||||
#(2|)#,
|
||||
#(3|)#,
|
||||
#(4|)#,
|
||||
#(5|)#,
|
||||
];
|
||||
"##},
|
||||
"<A-a>",
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[1|]#,
|
||||
#(2|)#,
|
||||
#(3|)#,
|
||||
#(4|)#,
|
||||
#(5|)#,
|
||||
];
|
||||
"##},
|
||||
),
|
||||
// each cursor does the sibling select independently
|
||||
(
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[1|]#,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
];
|
||||
|
||||
let b = [
|
||||
#("one"|)#,
|
||||
"two",
|
||||
"three",
|
||||
"four",
|
||||
"five",
|
||||
];
|
||||
"##},
|
||||
"<A-a>",
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[1|]#,
|
||||
#(2|)#,
|
||||
#(3|)#,
|
||||
#(4|)#,
|
||||
#(5|)#,
|
||||
];
|
||||
|
||||
let b = [
|
||||
#("one"|)#,
|
||||
#("two"|)#,
|
||||
#("three"|)#,
|
||||
#("four"|)#,
|
||||
#("five"|)#,
|
||||
];
|
||||
"##},
|
||||
),
|
||||
// conflicting sibling selections get normalized. Here, the primary
|
||||
// selection would choose every list item, but because the secondary
|
||||
// range covers more than one item, the descendent is the entire list,
|
||||
// which means the sibling is the assignment. The list item ranges just
|
||||
// get normalized out since the list itself becomes selected.
|
||||
(
|
||||
indoc! {r##"
|
||||
let a = [
|
||||
#[1|]#,
|
||||
2,
|
||||
#(3,
|
||||
4|)#,
|
||||
5,
|
||||
];
|
||||
"##},
|
||||
"<A-a>",
|
||||
indoc! {r##"
|
||||
let #(a|)# = #[[
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
]|]#;
|
||||
"##},
|
||||
),
|
||||
];
|
||||
|
||||
for test in tests {
|
||||
test_with_config(AppBuilder::new().with_file("foo.rs", None), test).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue