Description
openedon May 1, 2019
The Language Server Protocol sends diagnostics to clients as notifications. These notifications are typically sent in response to textDocument/didChange
or textDocument/didSave
, but they could arrive at any time. Clients have no control over when or if diagnostics will be sent to them. This lack of control causes problems for clients.
- Clients cannot indicate if there there are pending diagnostics. Because they can arrive at any time, or may never arrive, you cannot indicate if there are diagnostics being calculated or not.
- Clients cannot easily control when diagnostics should be displayed. A document update in order to retrieve accurate completion results may result in diagnostics being sent, for example.
- Servers can send clients diagnostics for files they might not be interested in, such as files that are not open in client editors. This results in clients having to read more data than they need.
I think it would be a good idea to add an optional mode to the protocol to disable sending diagnostics to clients unless they are explicitly requested for a file. An optional attribute could be added to InitializeParams
which when enabled would tell servers not to send diagnostics until a new message type textDocument/getDiagonistics
is sent. ServerCapabilities
could include an attribute for indicating if this mode is supported. Servers would then be required to respond to clients with textDocument/publishDiagnostics
with either an empty diagnostics
array, or previously computed results.
For my LSP client ALE, this would mean that ALE will be able to update the Vim status bar to indicate that diagnostic results from language servers are pending, and to avoid requesting diagnostics when the user only wants to get some completion results. Currently ALE is able to do this for tsserver
, because the tsserver
protocol requires the use of a geterr
command, but this is unfortunately not possible with language servers.
Let me know what you think. Thank you for the protocol.