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

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

[elpa] externals/eglot be15bb1 43/62: Per #74: Fix eglot-capabilities wh


From: Stefan Monnier
Subject: [elpa] externals/eglot be15bb1 43/62: Per #74: Fix eglot-capabilities when querying for multiple features
Date: Sat, 29 Sep 2018 17:13:35 -0400 (EDT)

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

    Per #74: Fix eglot-capabilities when querying for multiple features
    
    * eglot-tests.el (eglot-capabilities): New test.
    
    * eglot.el (eglot--server-capable): Fix problems with queries for
    multiple capabilities.
---
 eglot-tests.el | 22 ++++++++++++++++++++++
 eglot.el       |  6 +++---
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/eglot-tests.el b/eglot-tests.el
index 0598d9e..47a3b34 100644
--- a/eglot-tests.el
+++ b/eglot-tests.el
@@ -504,6 +504,28 @@ Pass TIMEOUT to `eglot--with-timeout'."
              `((python-mode . ("sh" "-c" "sleep 2 && pyls")))))
         (should-error (apply #'eglot--connect (eglot--guess-contact)))))))
 
+(ert-deftest eglot-capabilities ()
+  "Unit test for `eglot--server-capable'."
+  (cl-letf (((symbol-function 'eglot--capabilities)
+             (lambda (_dummy)
+               ;; test data lifted from Golangserver example at
+               ;; https://github.com/joaotavora/eglot/pull/74
+               (list :textDocumentSync 2 :hoverProvider t
+                     :completionProvider '(:triggerCharacters ["."])
+                     :signatureHelpProvider '(:triggerCharacters ["(" ","])
+                     :definitionProvider t :typeDefinitionProvider t
+                     :referencesProvider t :documentSymbolProvider t
+                     :workspaceSymbolProvider t :implementationProvider t
+                     :documentFormattingProvider t 
:xworkspaceReferencesProvider t
+                     :xdefinitionProvider t :xworkspaceSymbolByProperties t)))
+            ((symbol-function 'eglot--current-server-or-lose)
+             (lambda () nil)))
+    (should (eql 2 (eglot--server-capable :textDocumentSync)))
+    (should (eglot--server-capable :completionProvider :triggerCharacters))
+    (should (equal '(:triggerCharacters ["."]) (eglot--server-capable 
:completionProvider)))
+    (should-not (eglot--server-capable :foobarbaz))
+    (should-not (eglot--server-capable :textDocumentSync :foobarbaz))))
+
 (provide 'eglot-tests)
 ;;; eglot-tests.el ends here
 
diff --git a/eglot.el b/eglot.el
index 88c6b45..63fbce2 100644
--- a/eglot.el
+++ b/eglot.el
@@ -728,12 +728,12 @@ under cursor."
                    feats)
     (cl-loop for caps = (eglot--capabilities (eglot--current-server-or-lose))
              then (cadr probe)
-             for feat in feats
+             for (feat . more) on feats
              for probe = (plist-member caps feat)
              if (not probe) do (cl-return nil)
              if (eq (cadr probe) :json-false) do (cl-return nil)
-             if (not (listp (cadr probe))) do (cl-return (cadr probe))
-             finally (cl-return (or probe t)))))
+             if (not (listp (cadr probe))) do (cl-return (if more nil (cadr 
probe)))
+             finally (cl-return (or (cadr probe) t)))))
 
 (defun eglot--range-region (range &optional markers)
   "Return region (BEG . END) that represents LSP RANGE.



reply via email to

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