fix final failing tests

Kay Simmons created

Change summary

assets/keymaps/vim.json                 | 38 ++++++++-----------
crates/editor/src/editor.rs             | 53 ++++++++++++++++----------
crates/editor/src/items.rs              |  2 
crates/vim/src/normal/change.rs         |  1 
crates/vim/src/test/vim_test_context.rs |  3 +
crates/vim/src/vim.rs                   |  6 +-
6 files changed, 55 insertions(+), 48 deletions(-)

Detailed changes

assets/keymaps/vim.json πŸ”—

@@ -8,6 +8,22 @@
                     "Namespace": "G"
                 }
             ],
+            "i": [
+                "vim::PushOperator",
+                {
+                    "Object": {
+                        "around": false
+                    }
+                }
+            ],
+            "a": [
+                "vim::PushOperator",
+                {
+                    "Object": {
+                        "around": true
+                    }
+                }
+            ],
             "h": "vim::Left",
             "backspace": "vim::Backspace",
             "j": "vim::Down",
@@ -77,28 +93,6 @@
             ]
         }
     },
-    {
-        //Operators
-        "context": "Editor && VimControl && vim_operator == none",
-        "bindings": {
-            "i": [
-                "vim::PushOperator",
-                {
-                    "Object": {
-                        "around": false
-                    }
-                }
-            ],
-            "a": [
-                "vim::PushOperator",
-                {
-                    "Object": {
-                        "around": true
-                    }
-                }
-            ]
-        }
-    },
     {
         "context": "Editor && vim_mode == normal && vim_operator == none",
         "bindings": {

crates/editor/src/editor.rs πŸ”—

@@ -3709,18 +3709,30 @@ impl Editor {
         })
     }
 
-    pub fn move_page_up(&mut self, action: &MovePageUp, cx: &mut ViewContext<Self>) -> Option<()> {
-        self.take_rename(true, cx)?;
-        if self.context_menu.as_mut()?.select_first(cx) {
-            return None;
+    pub fn move_page_up(&mut self, action: &MovePageUp, cx: &mut ViewContext<Self>) {
+        if self.take_rename(true, cx).is_some() {
+            return;
+        }
+
+        if self
+            .context_menu
+            .as_mut()
+            .map(|menu| menu.select_first(cx))
+            .unwrap_or(false)
+        {
+            return;
         }
 
         if matches!(self.mode, EditorMode::SingleLine) {
             cx.propagate_action();
-            return None;
+            return;
         }
 
-        let row_count = self.visible_line_count()? as u32 - 1;
+        let row_count = if let Some(row_count) = self.visible_line_count() {
+            row_count as u32 - 1
+        } else {
+            return;
+        };
 
         let autoscroll = if action.center_cursor {
             Autoscroll::center()
@@ -3739,8 +3751,6 @@ impl Editor {
                 selection.collapse_to(cursor, goal);
             });
         });
-
-        Some(())
     }
 
     pub fn select_up(&mut self, _: &SelectUp, cx: &mut ViewContext<Self>) {
@@ -3775,25 +3785,30 @@ impl Editor {
         });
     }
 
-    pub fn move_page_down(
-        &mut self,
-        action: &MovePageDown,
-        cx: &mut ViewContext<Self>,
-    ) -> Option<()> {
+    pub fn move_page_down(&mut self, action: &MovePageDown, cx: &mut ViewContext<Self>) {
         if self.take_rename(true, cx).is_some() {
-            return None;
+            return;
         }
 
-        if self.context_menu.as_mut()?.select_last(cx) {
-            return None;
+        if self
+            .context_menu
+            .as_mut()
+            .map(|menu| menu.select_last(cx))
+            .unwrap_or(false)
+        {
+            return;
         }
 
         if matches!(self.mode, EditorMode::SingleLine) {
             cx.propagate_action();
-            return None;
+            return;
         }
 
-        let row_count = self.visible_line_count()? as u32 - 1;
+        let row_count = if let Some(row_count) = self.visible_line_count() {
+            row_count as u32 - 1
+        } else {
+            return;
+        };
 
         let autoscroll = if action.center_cursor {
             Autoscroll::center()
@@ -3812,8 +3827,6 @@ impl Editor {
                 selection.collapse_to(cursor, goal);
             });
         });
-
-        Some(())
     }
 
     pub fn select_down(&mut self, _: &SelectDown, cx: &mut ViewContext<Self>) {

crates/editor/src/items.rs πŸ”—

@@ -300,7 +300,7 @@ impl Item for Editor {
                 false
             } else {
                 let nav_history = self.nav_history.take();
-                self.set_scroll_anchor(data.scroll_anchor, cx);
+                self.set_scroll_anchor(scroll_anchor, cx);
                 self.change_selections(Some(Autoscroll::fit()), cx, |s| {
                     s.select_ranges([offset..offset])
                 });

crates/vim/src/test/vim_test_context.rs πŸ”—

@@ -51,8 +51,9 @@ impl<'a> VimTestContext<'a> {
             )
         });
 
-        // Setup search toolbars
+        // Setup search toolbars and keypress hook
         workspace.update(cx, |workspace, cx| {
+            observe_keypresses(window_id, cx);
             workspace.active_pane().update(cx, |pane, cx| {
                 pane.toolbar().update(cx, |toolbar, cx| {
                     let buffer_search_bar = cx.add_view(BufferSearchBar::new);

crates/vim/src/vim.rs πŸ”—

@@ -81,20 +81,20 @@ pub fn init(cx: &mut MutableAppContext) {
     .detach();
 }
 
-// Any keystrokes not mapped to vim should clar the active operator
+// Any keystrokes not mapped to vim should clear the active operator
 pub fn observe_keypresses(window_id: usize, cx: &mut MutableAppContext) {
     cx.observe_keystrokes(window_id, |_keystroke, _result, handled_by, cx| {
         dbg!(_keystroke);
-        dbg!(_result);
         if let Some(handled_by) = handled_by {
-            dbg!(handled_by.name());
             if handled_by.namespace() == "vim" {
+                println!("Vim action. Don't clear");
                 return true;
             }
         }
 
         Vim::update(cx, |vim, cx| {
             if vim.active_operator().is_some() {
+                println!("Clearing operator");
                 vim.clear_operator(cx);
             }
         });