]> git.eshelyaron.com Git - emacs.git/commitdiff
Treat null/nil server capabilities as false
authorJoram Schrijver <i@joram.io>
Fri, 13 Sep 2019 09:48:10 +0000 (11:48 +0200)
committerJoram Schrijver <i@joram.io>
Fri, 20 Sep 2019 15:01:43 +0000 (17:01 +0200)
Some language servers may specify null for some capabilities in the list
of server capabilities. This does not conform to the specification, but
treating it as false is more reasonable than treating it as true.

A current example is the PHP language server. which specifies null for
every capability it does not handle, like documentHighlightProvider.
This would cause Eglot to send constant textDocument/documentHighlight
requests, which all timed out.

* eglot.el (eglot--server-capable): Change the handling of null values
  for capabilities to treat them as false instead of true.

Copyright-paperwork-exempt: yes

lisp/progmodes/eglot.el

index 23d53edc2b2b07e8d60a142c87ff6af54c293cf1..845f0294dfa9aa8c742d3a28687c536f6f93606b 100644 (file)
@@ -1101,6 +1101,9 @@ under cursor."
              for probe = (plist-member caps feat)
              if (not probe) do (cl-return nil)
              if (eq (cadr probe) :json-false) do (cl-return nil)
+             ;; If the server specifies null as the value of the capability, it
+             ;; makes sense to treat it like false.
+             if (null (cadr probe)) do (cl-return nil)
              if (not (listp (cadr probe))) do (cl-return (if more nil (cadr probe)))
              finally (cl-return (or (cadr probe) t)))))