The Language Server protocol is used between a tool (the client) and a language smartness provider (the server) to integrate features like auto complete, goto definition, find all references and alike into the tool. The following diagram illustrates the communication between a tool and the language server.
The language server maintains semantic information about a program implemented in a particular language.
- When the user opens a document in the tool, it notifies the language server that the document was opened and that the truth of the document is now maintained by the tool in a memory buffer.
- When the user edits the document, the server is notified of the changes and updates the program’s semantic information.
- As the user makes changes the language server analyses the document and notifies the tool with any errors and warnings (diagnostics) that it finds.
- When the user requests to go to the definition of a symbol, the client sends a
definitionrequest to the server. The server responds with the URI of the document and a range inside that document. Based on this information the tool opens the corresponding document at the position where the symbol is defined.
- When the user closes the document, a
didClosenotification is sent, informing the language server that the truth of the file is now on the file system.
The communication between the Editor/IDE host and the Language Server uses JSON RPC v2.0. The protocol supports servers with different capabilities. The first request sent from the Editor/IDE to the language server informs the server about the supported language features.