Essa comunicação ocorre usando um conjunto de regras definidas pelo protocolo. O Language Server Protocol pode ser considerado uma versão reduzida do HTTP e se comunica apenas no JSON-RPC.

Você vê sugestões automáticas sofisticadas e mensagens de erro aparecendo no VSCode o tempo todo? Além disso, como apenas adicionando uma extensão simples do mercado VSCode, você obtém todo o poder do IntelliSense para uma linguagem completamente diferente, como C, Python, Java, etc.? Essa coisa vem do LSP.
O suporte para preenchimento automático e o IntelliSense para HTML / CSS / JavaScript são incorporados ao VSCode (assim como o PyCharm é fornecido com o suporte ao Python e outros IDEs da mesma forma) O mesmo suporte, no entanto, para outros idiomas pode ser implementado usando o Language Server Protocol para aqueles línguas.

LSP no editor de Mônaco

JSON-RPC significa JSON Remote Procedure Call. É uma arquitetura (semelhante à maneira como o REST é uma arquitetura), mas com a unidade fundamental sendo uma chamada de procedimento que um ponto de extremidade da API no caso do REST.

Aqui está uma carga útil simples para JSON-RPC:

// Requestcurl -X POST —data '{  "jsonrpc": "2.0",  "method": "runThisFunction",  "params": [ "some-param", 2 ],  "id": 1}'// Response{  "jsonrpc": "2.0",  "result": "codedamn",  "id": 1}

Veja, neste exemplo, estamos enviando uma carga codificada em JSON seguindo a especificação RPC. Se o servidor estiver configurado para manipular JSON-RPC corretamente, ele deverá executar o método runThisFunction com os parâmetros passados ​​e retorne o resultado no formulário conforme mostrado.

O LSP usa JSON-RPC para se comunicar com o servidor remoto. Segue o seguinte:

Content-Length: rnrn

Para escrever um exemplo, será assim:

Content-Length: 78{"jsonrpc":"2.0","method":"runThisFunction","params":["some-param",2],"id":1}

O LSP exige que você passe o Content-Length cabeçalho seguido por 2 CRLF fichas rn. Quando os servidores de idiomas em execução, como ccls receber isso, eles responderão com uma mensagem apropriada:

servidor ccls

Obviamente, no exemplo acima, você pode ver que ccls diz que não há método chamado runThisFunction, mas você pode ver que o servidor remoto também responde com um Content-Length cabeçalho com uma especificação JSON-RPC.

Com a introdução de um protocolo formal LSP – Microsoft reduziu o famoso M x N problema para M + N problema.
M = Linguagens diferentes (C, C ++, PHP, Python, Nó, Swift, Go, etc.)
N = Diferentes editores (VSCode, Eclipse, Notepad ++, Sublime Text, etc.)

Screenshot 2020 04 02 at 8.30.21 PM

Anteriormente, para editores M oferecerem suporte a idiomas N, você precisa de soluções M * N, ou seja, todo editor precisava implementar o suporte nativo para todos os idiomas de maneira diferente.
Com a introdução do LSP, o editor só precisa implementar suporte para o seguinte Language Server Protocol. Uma vez feito isso, qualquer um que cria um servidor de idiomas (seguindo os padrões LSP) pode ser perfeitamente integrado ao editor, sem que o editor “saiba” de maneira inteligente com que idioma está trabalhando!

À medida que mais e mais idiomas são lançados em seus servidores de idiomas – as pessoas têm mais opções de escolha de editores de sua escolha. Você não precisa mais usar apenas o XCode for Swift development ou o PyCharm for Python. Não apenas isso, mas os LSPs também podem ser implementados diretamente no JavaScript para oferecer suporte ao IntelliSense nos navegadores, como estou fazendo em codedamn – uma plataforma para os desenvolvedores aprenderem e crescerem! É um momento emocionante para estar vivo!

Paz
Mehul