Kuinka kielipalvelimen protokolla vaikuttaa IDE-verkkojen tulevaisuuteen

Visual Studio -koodin julkaisu vaikutti yksin kehittäjien ekosysteemiin siten, ettei paluuta ole nyt mahdollista. Se on avoimen lähdekoodin, ilmainen ja mikä tärkeintä, erittäin tehokas työkalu.

Mutta VSCoden avulla Microsoft antoi elämän vuonna 2016 toiselle erittäin tärkeälle asialle, joka on vähemmän tunnettu. Sitä kutsutaan kielipalvelimen protokollaksi.

Mikä on kielipalvelimen protokolla?

Kielipalvelimen protokolla (LSP) on protokolla tai tapa puhua kielipalvelimille (aivan kuten HTTP tai FTP).

Kielipalvelimet ovat erityisohjelmia, jotka toimivat tavallisilla palvelimilla. He ottavat muokkaustilan metatilan, jossa koodaat (esimerkiksi missä kohdistimesi on tällä hetkellä editorin sisällä, minkä tunnuksen päällä vietät nyt), ja palauttaa joukon toimintoja / ohjeita - minkä tunnuksen pitäisi ilmestyy seuraavaksi, mitä pitäisi tapahtua, kun napsautat CMD / Ctrl-näppäintä kyseistä tunnusta ja niin edelleen.

Tämä tiedonsiirto tapahtuu käyttämällä protokollan määrittelemää sääntöjoukkoa. Kielipalvelimen protokollaa voidaan pitää HTTP: n leikattuina versioina, ja se kommunikoi vain JSON-RPC: llä.

Miksi LSP vaaditaan?

Näetkö nämä hienot automaattiset ehdotukset ja virheilmoitukset ponnahdusikkunassa VSCodessa koko ajan? Ja kuinka vain lisäämällä yksinkertainen laajennus VSCode-kauppapaikalta saat kaiken IntelliSense-tehon täysin eri kielelle, kuten C, Python, Java ja niin edelleen? Se tulee LSP: ltä.

Automaattisen täydennyksen ja IntelliSense for HTML / CSS / JavaScript -tuki on pakattu VSCode-koodiin (aivan kuten PyCharm tulee myös Python-tuella). Sama tuki muille kielille voidaan kuitenkin toteuttaa kielipalvelinprotokollaa kyseisille kielille.

LSP Monacon toimittaja

Mikä on JSON-RPC?

JSON-RPC on lyhenne sanoista JSON Remote Procedure Call. Se on arkkitehtuuri (samanlainen kuin REST on arkkitehtuuri), mutta perusyksikkö on menettelykutsua eikä API-päätepistettä REST: n tapauksessa.

Tässä on yksinkertainen hyötykuorma JSON-RPC: lle:

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

Tässä esimerkissä lähetämme JSON-koodatun hyötykuorman RPC-määritysten mukaisesti. Jos palvelin on määritetty käsittelemään JSON-RPC oikein, se suorittaa menetelmän runThisFunctionvälitetyillä parametreilla ja palauttaa tuloksen muodossa olevalla tavalla.

LSP + JSON-RPC

LSP käyttää JSON-RPC: tä yhteydenpitoon etäpalvelimeen. Tästä seuraa tämä:

Content-Length: \r\n\r\n 

Jos haluat kirjoittaa esimerkin, se on seuraava:

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

LSP vaatii siirtää Content-Lengthotsikon, jota seuraa 2 CRLFrahakkeita \r\n. Kun käynnissä olevat kielipalvelimet, kuten kaltaiset, cclssaavat tämän, he vastaavat asianmukaisella viestillä:

ccls-palvelin

Tietenkin yllä olevasta esimerkistä näet, että cclssanotaan, että ei ole kutsuttua menetelmää runThisFunction. Mutta voit nähdä, että etäpalvelin vastaa myös Content-Lengthotsikolla, jolla on JSON-RPC-määritys.

Miksi kaikella tällä on merkitystä?

Ottamalla käyttöön muodollisen LSP-protokollan Microsoft pienensi kuuluisan M x Nongelman M + Nongelmaksi.

M = Eri kielet (C, C ++, PHP, Python, Node, Swift, Go jne.)

N = Erilaiset muokkausohjelmat (VSCode, Eclipse, Notepad ++, Sublime Text jne.)

Aikaisemmin tarvitset M * N-ratkaisuja, jotta M-editorit tukevat N-kieltä. Eli jokaisen toimittajan oli pantava natiivi tuki jokaiselle kielelle eri tavalla.

LSP: n käyttöönoton myötä editorin tarvitsi vain toteuttaa kielipalvelinprotokollan tuki. Sen jälkeen kuka tahansa, joka tekee kielipalvelimen (LSP-standardien mukaisesti), voidaan integroida saumattomasti editoriin ilman, että toimittaja koskaan "tietäisi" mitä kieltä se työskentelee!

IDE: n tulevaisuus

Kun yhä useammat kielet tulevat kielipalvelimiensa kanssa, ihmisillä on enemmän kyky valita haluamasi editori.

Sinun ei enää tarvitse noudattaa vain XCode for Swift -kehitystä tai PyCharm for Python. Paitsi tämä, mutta LSP: t voidaan myös toteuttaa suoraan JavaScriptiin tukemaan IntelliSenseä selaimessa, kuten teen koodedamnilla, kehittäjien oppimis- ja kasvualustalla! On jännittävä aika olla elossa!

Rauha,

Mehul