diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 82945fc00b..ef2c459aad 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -6542,7 +6542,7 @@ impl Editor { { if selections .iter() - .find(|selection| selection.equals(&offset_range)) + .find(|selection| selection.range().overlaps(&offset_range)) .is_none() { next_selected_range = Some(offset_range); diff --git a/crates/editor/src/movement.rs b/crates/editor/src/movement.rs index fd77e0cafe..332eb3c1c5 100644 --- a/crates/editor/src/movement.rs +++ b/crates/editor/src/movement.rs @@ -731,7 +731,9 @@ mod tests { let (snapshot, display_points) = marked_display_snapshot(marked_text, cx); assert_eq!( surrounding_word(&snapshot, display_points[1]), - display_points[0]..display_points[2] + display_points[0]..display_points[2], + "{}", + marked_text.to_string() ); } @@ -741,7 +743,7 @@ mod tests { assert("loremˇ ˇ ˇipsum", cx); assert("lorem\nˇˇˇ\nipsum", cx); assert("lorem\nˇˇipsumˇ", cx); - assert("lorem,ˇˇ ˇipsum", cx); + assert("loremˇ,ˇˇ ipsum", cx); assert("ˇloremˇˇ, ipsum", cx); } diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 063c7616a8..0194123bd2 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -373,8 +373,8 @@ pub(crate) struct DiagnosticEndpoint { #[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Debug)] pub enum CharKind { - Punctuation, Whitespace, + Punctuation, Word, } diff --git a/crates/vim/src/test.rs b/crates/vim/src/test.rs index 4fb87e70a0..9a6976183b 100644 --- a/crates/vim/src/test.rs +++ b/crates/vim/src/test.rs @@ -734,3 +734,26 @@ async fn test_paragraphs_dont_wrap(cx: &mut gpui::TestAppContext) { two"}) .await; } + +#[gpui::test] +async fn test_select_all_issue_2170(cx: &mut gpui::TestAppContext) { + let mut cx = VimTestContext::new(cx, true).await; + + cx.set_state( + indoc! {" + defmodule Test do + def test(a, ˇ[_, _] = b), do: IO.puts('hi') + end + "}, + Mode::Normal, + ); + cx.simulate_keystrokes(["g", "a"]); + cx.assert_state( + indoc! {" + defmodule Test do + def test(a, «[ˇ»_, _] = b), do: IO.puts('hi') + end + "}, + Mode::Visual, + ); +}