Skip to content

Commit

Permalink
Per joaotavora#74: Fix eglot-capabilities when querying for multiple …
Browse files Browse the repository at this point in the history
…features

* eglot-tests.el (eglot-capabilities): New test.

* eglot.el (eglot--server-capable): Fix problems with queries for
multiple capabilities.
  • Loading branch information
joaotavora committed Aug 17, 2018
1 parent 6874895 commit be15bb1
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
22 changes: 22 additions & 0 deletions eglot-tests.el
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 3 additions & 3 deletions eglot.el
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit be15bb1

Please sign in to comment.