Skip to content

Commit

Permalink
Per joaotavora/eglot#131: Tweak some details, fix some bugs
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
joaotavora committed Jul 15, 2022
1 parent 631126c commit 8227676
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions lisp/progmodes/eglot.el
Original file line number Diff line number Diff line change
Expand Up @@ -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 ()
Expand Down Expand Up @@ -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)))
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 8227676

Please sign in to comment.