branch: externals/eglot commit 25f6338741c04466591cf1ea1825b5f47f91bf0d Author: João Távora <joaotav...@gmail.com> Commit: João Távora <joaotav...@gmail.com>
Per #131: Tweak some details, fix some bugs eglot--recover-workspace-symbol-meta had a bug that still made it choke on improper lists. Also, when simply M-. to the thing at point, let's not lose time on iterating a potentially out-of-date eglot--workspace-symbols-cache. So clear it early in the pre-command-hook. * eglot.el (eglot--workspace-symbols-cache): Move up. (eglot--pre-command-hook): Clear eglot--workspace-symbols-cache here. (eglot--recover-workspace-symbol-meta): Check for consp. --- eglot.el | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/eglot.el b/eglot.el index 6d3667a84a..6f9c4f50f2 100644 --- a/eglot.el +++ b/eglot.el @@ -2101,8 +2101,12 @@ THINGS are either registrations or unregisterations (sic)." :key #'seq-first)))) (eglot-format (point) nil last-input-event)))) +(defvar eglot--workspace-symbols-cache (make-hash-table :test #'equal) + "Cache of `workspace/Symbol' results used by `xref-find-definitions'.") + (defun eglot--pre-command-hook () "Reset some temporary variables." + (clrhash eglot--workspace-symbols-cache) (setq eglot--last-inserted-char nil)) (defun eglot--CompletionParams () @@ -2392,9 +2396,6 @@ Try to visit the target file for a richer summary line." (eglot--current-server-or-lose)) (xref-make-match summary (xref-make-file-location file line column) length))) -(defvar eglot--workspace-symbols-cache (make-hash-table :test #'equal) - "Cache of `workspace/Symbol' results used by `xref-find-definitions'.") - (cl-defmethod xref-backend-identifier-completion-table ((_backend (eql eglot))) (if (eglot--server-capable :workspaceSymbolProvider) (let ((buf (current-buffer))) @@ -2446,10 +2447,10 @@ Try to visit the target file for a richer summary line." "Search `eglot--workspace-symbols-cache' for rich entry of STRING." (catch 'found (maphash (lambda (_k v) - (while v + (while (consp v) ;; Like mess? Ask minibuffer.el about improper lists. (when (equal (car v) string) (throw 'found (car v))) - (setq v (and (consp v) (cdr v))))) + (setq v (cdr v)))) eglot--workspace-symbols-cache))) (add-to-list 'completion-category-overrides