Allow completion menus to be cycled

Joseph T. Lyons created

Change summary

crates/editor/src/editor.rs | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)

Detailed changes

crates/editor/src/editor.rs 🔗

@@ -966,8 +966,11 @@ impl CompletionsMenu {
     ) {
         if self.selected_item > 0 {
             self.selected_item -= 1;
+        } else {
+            self.selected_item = self.matches.len() - 1;
             self.list.scroll_to(ScrollTarget::Show(self.selected_item));
         }
+        self.list.scroll_to(ScrollTarget::Show(self.selected_item));
         self.attempt_resolve_selected_completion_documentation(project, cx);
         cx.notify();
     }
@@ -979,8 +982,10 @@ impl CompletionsMenu {
     ) {
         if self.selected_item + 1 < self.matches.len() {
             self.selected_item += 1;
-            self.list.scroll_to(ScrollTarget::Show(self.selected_item));
+        } else {
+            self.selected_item = 0;
         }
+        self.list.scroll_to(ScrollTarget::Show(self.selected_item));
         self.attempt_resolve_selected_completion_documentation(project, cx);
         cx.notify();
     }
@@ -1532,17 +1537,23 @@ impl CodeActionsMenu {
     fn select_prev(&mut self, cx: &mut ViewContext<Editor>) {
         if self.selected_item > 0 {
             self.selected_item -= 1;
+        } else {
+            self.selected_item = self.actions.len() - 1;
             self.list.scroll_to(ScrollTarget::Show(self.selected_item));
-            cx.notify()
         }
+        self.list.scroll_to(ScrollTarget::Show(self.selected_item));
+        cx.notify();
     }
 
     fn select_next(&mut self, cx: &mut ViewContext<Editor>) {
         if self.selected_item + 1 < self.actions.len() {
             self.selected_item += 1;
             self.list.scroll_to(ScrollTarget::Show(self.selected_item));
-            cx.notify()
+        } else {
+            self.selected_item = 0;
+            self.list.scroll_to(ScrollTarget::Show(self.selected_item));
         }
+        cx.notify();
     }
 
     fn select_last(&mut self, cx: &mut ViewContext<Editor>) {