emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/eglot 14ab804 54/69: Fix #318: unbreak xref-find-defini


From: João Távora
Subject: [elpa] externals/eglot 14ab804 54/69: Fix #318: unbreak xref-find-definitions
Date: Sun, 20 Oct 2019 08:21:52 -0400 (EDT)

branch: externals/eglot
commit 14ab804d67d3cc671bba2212f893b4baddabe02c
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Fix #318: unbreak xref-find-definitions
    
    * 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.
---
 eglot-tests.el | 12 ++++++++++++
 eglot.el       | 29 +++++++++++++++--------------
 2 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/eglot-tests.el b/eglot-tests.el
index 6a544d9..c01c699 100644
--- a/eglot-tests.el
+++ b/eglot-tests.el
@@ -449,6 +449,18 @@ Pass TIMEOUT to `eglot--with-timeout'."
       (completion-at-point)
       (should (looking-back "sys.exit")))))
 
+(ert-deftest basic-xref ()
+  "Test basic xref functionality in a python LSP"
+  (skip-unless (executable-find "pyls"))
+  (eglot--with-fixture
+      '(("project" . (("something.py" . "def foo(): pass\ndef bar(): foo()"))))
+    (with-current-buffer
+        (eglot--find-file-noselect "project/something.py")
+      (should (eglot--tests-connect))
+      (search-forward "bar(): f")
+      (call-interactively 'xref-find-definitions)
+      (should (looking-at "foo(): pass")))))
+
 (ert-deftest hover-after-completions ()
   "Test documentation echo in a python LSP"
   (skip-unless (executable-find "pyls"))
diff --git a/eglot.el b/eglot.el
index 9d5c546..7b0e3e2 100644
--- a/eglot.el
+++ b/eglot.el
@@ -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)
@@ -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."
@@ -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."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]