flux-lsp icon indicating copy to clipboard operation
flux-lsp copied to clipboard

Out of spec behavior for unitialized connection

Open rockstar opened this issue 2 years ago • 0 comments

From the spec re: initialize request

The initialize request is sent as the first request from the client to the server. If the server receives a request or notification before the initialize request it should act as follows:

  • For a request the response should be an error with code: -32002. The message can be picked by the server.
  • Notifications should be dropped, except for the exit notification. This will allow the exit of a server without an initialize request.

Until the server has responded to the initialize request with an InitializeResult, the client must not send any additional requests or notifications to the server. In addition the server is not allowed to send any requests or notifications to the client until it has responded with an InitializeResult, with the exception that during the initialize request the server is allowed to send the notifications window/showMessage, window/logMessage and telemetry/event as well as the window/showMessageRequest request to the client. In case the client sets up a progress token in the initialize params (e.g. property workDoneToken) the server is also allowed to use that token (and only that token) using the $/progress notification sent from the server to the client.

The initialize request may only be sent once.

Currently, our server will take any command without regard for whether initialize has been sent. It also will respond to the initialize request multiple times, instead of erroring. While we've expected lspower to handle spec adherence, this is likely at a level that we're responsible for.

DOD:

  • All other rpc calls error if initialize hasn't been called yet.
  • initialize errors if called twice

rockstar avatar Oct 13 '22 21:10 rockstar