Avoid making LSP requests when moving cursor due to following

Max Brunsfeld created

Change summary

crates/editor/src/editor.rs | 53 ++++++++++++++++++++------------------
1 file changed, 28 insertions(+), 25 deletions(-)

Detailed changes

crates/editor/src/editor.rs 🔗

@@ -5066,37 +5066,40 @@ impl Editor {
             cx,
         );
 
-        let completion_menu = match self.context_menu.as_mut() {
-            Some(ContextMenu::Completions(menu)) => Some(menu),
-            _ => {
-                self.context_menu.take();
-                None
+        if local {
+            let completion_menu = match self.context_menu.as_mut() {
+                Some(ContextMenu::Completions(menu)) => Some(menu),
+                _ => {
+                    self.context_menu.take();
+                    None
+                }
+            };
+
+            if let Some(completion_menu) = completion_menu {
+                let cursor_position = new_cursor_position.to_offset(&buffer);
+                let (word_range, kind) =
+                    buffer.surrounding_word(completion_menu.initial_position.clone());
+                if kind == Some(CharKind::Word)
+                    && word_range.to_inclusive().contains(&cursor_position)
+                {
+                    let query = Self::completion_query(&buffer, cursor_position);
+                    cx.background()
+                        .block(completion_menu.filter(query.as_deref(), cx.background().clone()));
+                    self.show_completions(&ShowCompletions, cx);
+                } else {
+                    self.hide_context_menu(cx);
+                }
             }
-        };
 
-        if let Some(completion_menu) = completion_menu {
-            let cursor_position = new_cursor_position.to_offset(&buffer);
-            let (word_range, kind) =
-                buffer.surrounding_word(completion_menu.initial_position.clone());
-            if kind == Some(CharKind::Word) && word_range.to_inclusive().contains(&cursor_position)
+            if old_cursor_position.to_display_point(&display_map).row()
+                != new_cursor_position.to_display_point(&display_map).row()
             {
-                let query = Self::completion_query(&buffer, cursor_position);
-                cx.background()
-                    .block(completion_menu.filter(query.as_deref(), cx.background().clone()));
-                self.show_completions(&ShowCompletions, cx);
-            } else {
-                self.hide_context_menu(cx);
+                self.available_code_actions.take();
             }
+            self.refresh_code_actions(cx);
+            self.refresh_document_highlights(cx);
         }
 
-        if old_cursor_position.to_display_point(&display_map).row()
-            != new_cursor_position.to_display_point(&display_map).row()
-        {
-            self.available_code_actions.take();
-        }
-        self.refresh_code_actions(cx);
-        self.refresh_document_highlights(cx);
-
         self.pause_cursor_blinking(cx);
         cx.emit(Event::SelectionsChanged { local });
     }