]> git.eshelyaron.com Git - emacs.git/commitdiff
Eglot: fix bug introduced when "fixing" middle-of-symbol completions
authorJoão Távora <joaotavora@gmail.com>
Thu, 25 Jan 2024 12:10:40 +0000 (12:10 +0000)
committerEshel Yaron <me@eshelyaron.com>
Thu, 25 Jan 2024 18:06:15 +0000 (19:06 +0100)
Culprit:

    commit a6ef458e3831001b0acad57cf8fa75b77a4aff3f
    Author: João Távora <joaotavora@gmail.com>
    Date:   Tue Dec 26 00:31:29 2023 +0000

        Eglot: partial fix for middle-of-symbol completions

The decision to restore the buffer state to when the last LSP
completion set was invoked is rock-solid (because that the state
those completions' edits apply to).

However, when caching the LSP completions across multiple
eglot-completion-at-point calls, we must make sure to also restore the
values of the local values, such as 'bounds-string'.  This allows us
to do that restoration.

* lisp/progmodes/eglot.el (eglot-completion-at-point): Also
restore bounds-string from capf session cache.

Github-reference: https://github.com/joaotavora/eglot/issues/1349
(cherry picked from commit 5d88c98e7c101ebad68b562334020b8c082c2ca5)

lisp/progmodes/eglot.el

index c5fbf5eb9d5ea2b1d23abef1940a25344d0fb571..f8d9605160650de672ae48444397df8d8547781d 100644 (file)
@@ -3125,7 +3125,8 @@ for which LSP on-type-formatting should be requested."
                          items)))
                   ;; (trace-values "Requested" (length proxies) cachep bounds)
                   (setq eglot--capf-session
-                        (if cachep (list bounds retval resolved orig-pos) :none))
+                        (if cachep (list bounds retval resolved orig-pos
+                                         bounds-string) :none))
                   (setq local-cache retval)))))
            (resolve-maybe
             ;; Maybe completion/resolve JSON object `lsp-comp' into
@@ -3145,7 +3146,8 @@ for which LSP on-type-formatting should be requested."
                  (>= (cdr bounds) (cdr (nth 0 eglot--capf-session))))
         (setq local-cache (nth 1 eglot--capf-session)
               resolved (nth 2 eglot--capf-session)
-              orig-pos (nth 3 eglot--capf-session))
+              orig-pos (nth 3 eglot--capf-session)
+              bounds-string (nth 4 eglot--capf-session))
         ;; (trace-values "Recalling cache" (length local-cache) bounds orig-pos)
         )
       (list