Language Server Protocol

A blog covering the background and mechanics of the protocol has been added to the Visual Studio Code site. Additionally today Red Hat, Eclipse Che and others announced support for the protocol.

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.

Interaction diagram

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 definition request 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 didClose notification 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.

 

ref: https://github.com/Microsoft/language-server-protocol

Language server plugin support in Typescript 2.3

The intention of this API is to extend TS Checking to other features/frameworks, so that instead of them writing Linters and Feature Extensions, they can provide these features out of the box to TS Users using the tsServer, which is TS’ own language service, which editors use to provide TS features, like typeahead, code navigation, real time errors etc..

Check out these plugins:

 

Eg.

VSCode

  • cd workspace folder
  • npm install tslint-language-service
  • npm install tslint@4.5.1 (peer dependency is defined as 4.x)
  • open the workspace folder in VS Code
  • disable vscode-tslint for the workspace
  • edit the tsconfig.json
{
    "compilerOptions": {
        "plugins": [
            {
                "name": "tslint-language-service"
            }
        ]
    }
}