Open sim642 opened 2 years ago
I suspect to change this back (i.e. revert #137) we need to get xtext involved so to not regress all the xtext generated language servers. See https://github.com/eclipse/xtext-core/issues/558 for the discussion that led to #137's behaviour.
Is
Received message which is neither a response nor a notification message
fixed in vscode meanwhile?
If this is still relevant a failing unit test or similar would be helpful so we can decide how to proceed
When a JSON-RPC request without
params
(i.e. them beingnull
in Java) is emitted, that gets written as"params": null
instead of just omitting theparams
field from the output. The latter should be done instead.Specifications
JSON-RPC specification says:
where "two structured types (Objects and Arrays)".
LSP specification says (in TypeScript syntax):
which exactly matches the JSON-RPC specification with the
?
meaning omission, but notnull
(which would have to be explicitly given as a| null
variant).Implementation
The writing of
params
here: https://github.com/eclipse/lsp4j/blob/22f8edce55379bd9d4ae1b96bc614e74549bc0f9/org.eclipse.lsp4j.jsonrpc/src/main/java/org/eclipse/lsp4j/jsonrpc/json/adapters/MessageTypeAdapter.java#L404-L409 uses thewriteNullValue
function here: https://github.com/eclipse/lsp4j/blob/22f8edce55379bd9d4ae1b96bc614e74549bc0f9/org.eclipse.lsp4j.jsonrpc/src/main/java/org/eclipse/lsp4j/jsonrpc/json/adapters/MessageTypeAdapter.java#L449-L457 which goes out of its way to output anull
instead of omitting missingparams
.This clearly violates the specifications and trips up other JSON-RPC/LSP implementations that require incoming requests to follow the specification to the letter.
Background
According to git blame, this behavior was introduced in #137, the goal of which was to fix the behavior for response
result
that indeed may not be omitted but may benull
. Looks like the same logic was erroneously applied to request/notificationparams
as well.