]> git.eshelyaron.com Git - emacs.git/commit
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)
commit471434e068816b7d28616aeefa9fe53a5130eca1
tree0664cd27b4d07842b10d733c3f4c3a33daab25cc
parentad1cc3b1c21188c5fe3264d6b4e2b1f93a9161b6
Don't send dummy json object in "initialized" notification ()

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