From ee58d92a7de1c8b1914c77177a7d5e755f1de827 Mon Sep 17 00:00:00 2001 From: Michal Krzywkowski Date: Sun, 4 Nov 2018 16:59:05 +0100 Subject: [PATCH] Fix a bug when response to definitions request is a single location It's valid to return just a single Location for a definitions request. * eglot.el (xref-backend-definitions): Coerce response to a vector. --- lisp/progmodes/eglot.el | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 2b683f8874a..f11a14e11c5 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -1381,17 +1381,20 @@ DUMMY is ignored." (cl-defmethod xref-backend-definitions ((_backend (eql eglot)) identifier) (let* ((rich-identifier (car (member identifier eglot--xref-known-symbols))) - (location-or-locations + (definitions (if rich-identifier (get-text-property 0 :locations rich-identifier) (jsonrpc-request (eglot--current-server-or-lose) :textDocument/definition (get-text-property - 0 :textDocumentPositionParams identifier))))) + 0 :textDocumentPositionParams identifier)))) + (locations + (and definitions + (if (vectorp definitions) definitions (vector definitions))))) (eglot--sort-xrefs (mapcar (jsonrpc-lambda (&key uri range) (eglot--xref-make identifier uri (plist-get range :start))) - location-or-locations)))) + locations)))) (cl-defmethod xref-backend-references ((_backend (eql eglot)) identifier) (unless (eglot--server-capable :referencesProvider) -- 2.39.2