]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't send dummy json object in "initialized" notification ()
authorVladimir Panteleev <git@thecybershadow.net>
Fri, 4 Oct 2019 10:13:32 +0000 (10:13 +0000)
committerJoão Távora <joaotavora@gmail.com>
Sat, 5 Oct 2019 09:04:08 +0000 (10:04 +0100)
Eglot uses a JSON object { __dummy__ : true } as a placeholder instead
of the empty object {}.  It does this out of necessity, since encoding
an empty object can't currently be easily using the current jsonrpc.el
library.  However, this also causes the parameter to be actually sent
to the server.

Since the JSON-RPC specification states "The names MUST match exactly,
including case, to the method's expected parameters" this is
non-conforming to the protocol.

The LSP specification does not seem to indicate how servers should
handle method calls with parameters they do not support.  As such,
ignoring the parameter, or reporting an error, or crashing all seem to
be "valid" behaviors as far as the specification is concerned.

We can avoid this by using an empty hash table instead of a dummy
parameter.  Currently, an empty hash table is the only Emacs Lisp
object which jsonrpc.el serializes to an empty JSON object in
jsonrpc--json-encode.

* eglot.el (eglot--connect): Use make-hash-table instead of dummy
  object.

Copyright-paperwork-exempt: yes
GitHub-reference: https://github.com/joaotavora/eglot/issues/312

lisp/progmodes/eglot.el

index cf2f371accd26406b5a6ea4f80a264e491f4bb99..ef7f8f0a3ece14b53d2bba2dbdfc1fdd1f2de34a 100644 (file)
@@ -848,7 +848,7 @@ This docstring appeases checkdoc, that's all."
                           (push server
                                 (gethash project eglot--servers-by-project))
                           (setf (eglot--capabilities server) capabilities)
-                          (jsonrpc-notify server :initialized `(:__dummy__ t))
+                          (jsonrpc-notify server :initialized (make-hash-table))
                           (dolist (buffer (buffer-list))
                             (with-current-buffer buffer
                               (eglot--maybe-activate-editing-mode server)))