emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/eglot d5859b5 03/54: Per #319: fix race condition when


From: João Távora
Subject: [elpa] externals/eglot d5859b5 03/54: Per #319: fix race condition when company-completing quickly
Date: Thu, 16 Apr 2020 05:31:44 -0400 (EDT)

branch: externals/eglot
commit d5859b53bdef12f2c7cb8cb51b5e2223e609769f
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Per #319: fix race condition when company-completing quickly
    
    For some reason, probably related to the way that Eglot tries to
    maintain the responsiveness of Company completion tooltips (see
    below), the user's explicit input will sometimes be surprisingly
    deleted by Company, leading to a horrible completion experience.
    
    This is sometimes hard to reproduce, but appears to match this
    description perfectly:
    https://github.com/joaotavora/eglot/issues/319#issuecomment-542955432
    
    Fortunately, Company has a good fix for this, which is to pass
    `:company-require-match 'never` in the completion-at-point function.
    This is the fix applied in this commit.
    
    However, this line shouldn't be required since the default value for
    `company-require-match` is `company-explicit-action-p`, presumably
    meaning that the auto-deletion should never take place for characters
    typed by the user.
    
    This points to a bug in Company, or at least something which may have
    been exacerbated by the way that Eglot aggressively fetches
    completions from the server by passing :cancel-on-input to
    `jsonrpc-request`, discarding out-of-date replies.  Perhaps that
    discarding step bears with it some side-effects that make the
    `company-explicit-action-p` test return `nil` instead of the correct
    `t`.  Company interprets this as carte blanche to delete the last
    inserted character.
    
    * eglot.el (eglot-completion-at-point): Use :company-require-match
    'never.
---
 eglot.el | 1 +
 1 file changed, 1 insertion(+)

diff --git a/eglot.el b/eglot.el
index bd5f1ac..92a35ca 100644
--- a/eglot.el
+++ b/eglot.el
@@ -2005,6 +2005,7 @@ is not active."
                (erase-buffer)
                (insert formatted)
                (current-buffer)))))
+       :company-require-match 'never
        :company-prefix-length
        (save-excursion
          (when (car bounds) (goto-char (car bounds)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]