Skip to content

Commit

Permalink
Fix joaotavora/eglot#318: unbreak xref-find-definitions
Browse files Browse the repository at this point in the history
* eglot-tests.el (basic-xref): New test.

* eglot.el (eglot--collecting-xrefs): Add an edebug spec.
(eglot--lsp-xrefs-for-method): Actually collect xref.
(xref-backend-apropos): Fix indentation slightly.
  • Loading branch information
joaotavora committed Oct 13, 2019
1 parent 502d883 commit fa7a779
Showing 1 changed file with 15 additions and 14 deletions.
29 changes: 15 additions & 14 deletions eglot.el
Original file line number Diff line number Diff line change
Expand Up @@ -1724,6 +1724,7 @@ Calls REPORT-FN maybe if server publishes diagnostics in time."

(cl-defmacro eglot--collecting-xrefs ((collector) &rest body)
"Sort and handle xrefs collected with COLLECTOR in BODY."
(declare (indent 1) (debug (sexp &rest form)))
(let ((collected (cl-gensym "collected")))
`(unwind-protect
(let (,collected)
Expand Down Expand Up @@ -1786,13 +1787,13 @@ Try to visit the target file for a richer summary line."
"/"))))))
(eglot--error "Sorry, this server doesn't do %s" method))
(eglot--collecting-xrefs (collect)
(mapc
(eglot--lambda ((Location) uri range)
(eglot--xref-make (symbol-at-point) uri range))
(jsonrpc-request
(eglot--current-server-or-lose) method (append
(eglot--TextDocumentPositionParams)
extra-params)))))
(mapc
(eglot--lambda ((Location) uri range)
(collect (eglot--xref-make (symbol-at-point) uri range)))
(jsonrpc-request
(eglot--current-server-or-lose) method (append
(eglot--TextDocumentPositionParams)
extra-params)))))

(cl-defun eglot--lsp-xref-helper (method &key extra-params capability )
"Helper for `eglot-find-declaration' & friends."
Expand Down Expand Up @@ -1829,13 +1830,13 @@ Try to visit the target file for a richer summary line."
(cl-defmethod xref-backend-apropos ((_backend (eql eglot)) pattern)
(when (eglot--server-capable :workspaceSymbolProvider)
(eglot--collecting-xrefs (collect)
(mapc
(eglot--lambda ((SymbolInformation) name location)
(eglot--dbind ((Location) uri range) location
(collect (eglot--xref-make name uri range))))
(jsonrpc-request (eglot--current-server-or-lose)
:workspace/symbol
`(:query ,pattern))))))
(mapc
(eglot--lambda ((SymbolInformation) name location)
(eglot--dbind ((Location) uri range) location
(collect (eglot--xref-make name uri range))))
(jsonrpc-request (eglot--current-server-or-lose)
:workspace/symbol
`(:query ,pattern))))))

(defun eglot-format-buffer ()
"Format contents of current buffer."
Expand Down

0 comments on commit fa7a779

Please sign in to comment.