]> git.eshelyaron.com Git - emacs.git/commitdiff
Use a hash-table for storing resolved completions
authorJoão Távora <joaotavora@gmail.com>
Mon, 13 Jul 2020 22:59:41 +0000 (23:59 +0100)
committerJoão Távora <joaotavora@gmail.com>
Mon, 13 Jul 2020 22:59:41 +0000 (23:59 +0100)
* eglot.el (eglot-completion-at-point): use a hash-table for
storing resolved completions.

GitHub-reference: fix https://github.com/joaotavora/eglot/issues/510

lisp/progmodes/eglot.el

index 865ca03dd321cc3e800ee0f265c5955df87049b3..c0f3143ba143d9b0c6fc4047d724852fd25c313c 100644 (file)
@@ -2103,20 +2103,20 @@ is not active."
                              (put-text-property 0 1 'eglot--lsp-item item proxy))
                            proxy))
                        items)))))
-           resolved
+           (resolved (make-hash-table))
            (resolve-maybe
             ;; Maybe completion/resolve JSON object `lsp-comp' into
             ;; another JSON object, if at all possible.  Otherwise,
             ;; just return lsp-comp.
             (lambda (lsp-comp)
-              (cond (resolved resolved)
-                    ((and (eglot--server-capable :completionProvider
-                                                 :resolveProvider)
-                          (plist-get lsp-comp :data))
-                     (setq resolved
-                           (jsonrpc-request server :completionItem/resolve
-                                            lsp-comp :cancel-on-input t)))
-                    (t lsp-comp))))
+              (or (gethash lsp-comp resolved)
+                  (setf (gethash lsp-comp resolved)
+                        (if (and (eglot--server-capable :completionProvider
+                                                        :resolveProvider)
+                                 (plist-get lsp-comp :data))
+                            (jsonrpc-request server :completionItem/resolve
+                                             lsp-comp :cancel-on-input t)
+                          lsp-comp)))))
            (bounds (bounds-of-thing-at-point 'symbol)))
       (list
        (or (car bounds) (point))