Hvordan sprogserverprotokollen påvirker fremtiden for IDE'er

Udgivelsen af ​​Visual Studio Code påvirkede udviklerens økosystem på en sådan måde, at der ikke er nogen vej tilbage nu. Det er open source, gratis og vigtigst af alt, et superkraftigt værktøj.

Men med VSCode gav Microsoft liv til en anden super vigtig ting tilbage i 2016, som er mindre kendt. Det kaldes Language Server Protocol.

Hvad er Language Server Protocol?

Language Server Protocol (LSP) er en protokol eller en måde at tale med sprogservere på (ligesom HTTP eller FTP).

Sprogservere er specielle programmer, der kører på almindelige servere. De tager metatilstanden af ​​editoren, som du koder i (for eksempel hvor din markør i øjeblikket er inde i editoren, hvilket token du svæver over lige nu) og returnerer et sæt handlinger / instruktioner - hvilket token skal vises næste, hvad der skal ske, når du CMD / Ctrl-klik på det token og så videre.

Denne kommunikation sker ved hjælp af et sæt regler defineret af protokollen. Language Server Protocol kan betragtes som en nedskåret version af HTTP og kommunikerer kun på JSON-RPC.

Hvorfor kræves LSP?

Ser du de smarte autosuggestions- og fejlmeddelelser dukker op i VSCode hele tiden? Og hvordan, bare ved at tilføje en simpel udvidelse fra VSCode-markedet, får du al den IntelliSense-strøm til et helt andet sprog som C, Python, Java og så videre? Det kommer fra LSP.

Støtte til autofuldførelse og IntelliSense til HTML / CSS / JavaScript kommer bagt ind i VSCode (ligesom PyCharm kommer bagt ind med Python-support). Den samme support til andre sprog kan dog implementeres ved hjælp af Language Server Protocol til disse sprog.

LSP i Monaco editor

Hvad er JSON-RPC?

JSON-RPC står for JSON Remote Procedure Call. Det er en arkitektur (svarende til hvordan REST er en arkitektur), men hvor den grundlæggende enhed er et procedureopkald snarere end et API-slutpunkt i tilfælde af REST.

Her er en simpel nyttelast til JSON-RPC:

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

I dette eksempel sender vi en JSON-kodet nyttelast efter RPC-specifikation. Hvis serveren er konfigureret til at håndtere JSON-RPC korrekt, vil den udføre metoden runThisFunctionmed de passerede parametre og returnere resultatet i form som vist.

LSP + JSON-RPC

LSP bruger JSON-RPC til at kommunikere til fjernserver. Det følger dette:

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

For at skrive et eksempel vil det være sådan:

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

LSP kræver, at du passerer Content-Lengthoverskriften efterfulgt af 2 CRLFtokens \r\n. Når de kørende sprogservere som cclsmodtager dette, svarer de med en passende besked:

ccls-server

I eksemplet ovenfor kan du selvfølgelig se, at der cclsstår, at der ikke er nogen metode, der kaldes runThisFunction. Men du kan se, at fjernserveren også reagerer med et Content-Lengthheader med en JSON-RPC-specifikation.

Hvorfor betyder alt dette noget?

Med introduktionen af ​​en formel protokol LSP reducerede Microsoft det berømte M x Nproblem til et M + Nproblem.

M = forskellige sprog (C, C ++, PHP, Python, Node, Swift, Go osv.)

N = forskellige redaktører (VSCode, Eclipse, Notepad ++, Sublime Text osv.)

Tidligere har M * N-løsninger været nødvendige for at M-redaktører understøtter N-sprog. Det vil sige, at hver redaktør var nødt til at implementere indfødt support til hvert sprog forskelligt.

Med introduktionen af ​​LSP behøvede editoren kun at implementere support til Language Server Protocol. Når det gjorde det, kan enhver, der fremstiller en sprogserver (efter LSP-standarderne), integreres problemfrit med redaktøren, uden at redaktøren nogensinde intelligent "ved", hvilket sprog den arbejder med!

Fremtiden for IDE'er

Da flere og flere sprog kommer ud med deres sprogservere, har folk større mulighed for at vælge den editor, de bedst kan lide.

Du bliver ikke længere nødt til kun at holde fast ved XCode til Swift-udvikling eller PyCharm til Python. Ikke kun dette, men LSP'er kan også implementeres direkte i JavaScript for at understøtte IntelliSense i browseren, som jeg laver på codedamn, en platform for udviklere at lære og vokse! Det er en spændende tid at være i live!

Fred,

Mehul