Fix infinite loop in select all

Conrad Irwin created

Change summary

crates/editor/src/editor.rs |  2 +-
crates/vim/src/test.rs      | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)

Detailed changes

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);

crates/vim/src/test.rs 🔗

@@ -734,3 +734,27 @@ 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"]);
+    // TODO: this would be better if it selected the [ not the space.
+    cx.assert_state(
+        indoc! {"
+        defmodule« ˇ»Test« ˇ»do
+        «    ˇ»def« ˇ»test(a,« ˇ»[_,« ˇ»_]« ˇ»=« ˇ»b),« ˇ»do:« ˇ»IO.puts('hi')
+        end
+    "},
+        Mode::Visual,
+    );
+}