lsp: Disable usage of follow-up completion invokes (#21755)

Piotr Osiewicz created

Some of our users ran into a peculiar bug: autoimports with vtsls were
leaving behind an extra curly brace. I think we were slightly incorrect
in always requesting a follow-up completion without regard for last
result of completion request (whether it was incomplete or not).
Specifically, we're falling into this branch in current form:
https://github.com/yioneko/vtsls/blob/037c2b615bf4cfe9dd65d9affc7a155fbb2ca255/packages/service/src/service/completion.ts#L121
which then leads to incorrect edits being returned from vtsls.

Release Notes:

- Fixed an edge case with appliance of autocompletions in VTSLS that
could result in incorrect edits being applied.

Change summary

crates/editor/src/editor.rs | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)

Detailed changes

crates/editor/src/editor.rs 🔗

@@ -4461,16 +4461,15 @@ impl Editor {
             };
 
         let query = Self::completion_query(&self.buffer.read(cx).read(cx), position);
-        let (is_followup_invoke, aside_was_displayed) = match self.context_menu.read().deref() {
-            Some(ContextMenu::Completions(menu)) => (true, menu.aside_was_displayed.get()),
-            _ => (false, false),
+
+        let aside_was_displayed = match self.context_menu.read().deref() {
+            Some(ContextMenu::Completions(menu)) => menu.aside_was_displayed.get(),
+            _ => false,
         };
-        let trigger_kind = match (&options.trigger, is_followup_invoke) {
-            (_, true) => CompletionTriggerKind::TRIGGER_FOR_INCOMPLETE_COMPLETIONS,
-            (Some(trigger), _) if buffer.read(cx).completion_triggers().contains(trigger) => {
+        let trigger_kind = match &options.trigger {
+            Some(trigger) if buffer.read(cx).completion_triggers().contains(trigger) => {
                 CompletionTriggerKind::TRIGGER_CHARACTER
             }
-
             _ => CompletionTriggerKind::INVOKED,
         };
         let completion_context = CompletionContext {