Language Server Protocol (LSP) je otevřený protokol založený na JSON-RPC, který umožňuje editorům zdrojového kódu a integrovaným vývojovým prostředím (IDE) komunikovat se servery poskytujícími funkce specifické pro daný programovací jazyk, jako je doplňování kódu, zvýrazňování syntaxe a označování varování a chyb, stejně jako nástroje pro refactoring, které bývají označovány za „nástroje jazykové inteligence“. Cílem LSP je umožnit podporu programovacích jazyků nezávisle na konkrétním editoru nebo IDE. Na počátku 20. let 21. století se LSP rychle stal „normou“ pro poskytovatele nástrojů jazykové inteligence.
Historie LSP původně vyvinutý pro Visual Studio Code společnosti Microsoft se stal otevřeným standardem. Společnost Microsoft oznámila 27. června 2016 spolupráci se společnostmi Red Hat a Codenvy s cílem standardizovat specifikaci LSP. Jeho specifikace je hosted a vyvinut na GitHub.
Souvislosti Moderní IDE poskytují programátorům sofistikované vlastnosti jako je doplňování kódu, refactoring, navigace k definici symbolu, zvýrazňování syntaxe a označování chyb a varování.
Pokud chce například programátor přejmenovat metodu read, musí buď ručně upravit příslušné zdrojové soubory a změnit výskyty starého názvu metody na nový, nebo použít refaktoringové funkce IDE k automatickému provedení všech nezbytných změn. Pro podporu tohoto stylu refaktoringu potřebuje IDE sofistikované porozumění programovacímu jazyku, ve kterém je program napsán. Programovací nástroj bez takového porozumění, který by například prováděl naivní vyhledávání a nahrazování, by mohl způsobit chyby. Při přejmenování metody read by například nástroj neměl nahrazovat částečnou shodu v proměnné, která by se mohla jmenovat readyState, ani by neměl nahrazovat část komentáře v kódu obsahující slovo „already“. Stejně tak by přejmenování lokální proměnné read nemělo vést ke změně proměnných se stejným názvem v jiných oblastech.
Běžné kompilátory nebo interprety pro konkrétní programovací jazyk obvykle nejsou schopny tyto jazykové služby poskytovat, protože jsou napsány buď s cílem převést zdrojový kód na cílový kód nebo kód okamžitě spustit. Jazykové služby musí být navíc schopny zpracovávat zdrojový kód, které není dobře zformátovaný, například proto, že programátor ještě nedokončil psaní příkazu, procedury nebo jiné konstrukce. Navíc malé změny v souboru zdrojového kódu, které se provádějí během psaní, obvykle mění sémantiku programu. Aby bylo možné poskytnout uživateli okamžitou zpětnou vazbu, musí být editační nástroj schopen velmi rychle vyhodnotit syntaktické a sémantické důsledky konkrétní úpravy. Kompilátory a interprety proto nejsou vhodnými kandidáty pro vytváření informací potřebných pro editační nástroj.
Dokud neexistoval LSP pro vývoj Visual Studio Code, byla většina jazykových služeb obecně svázána s určitým IDE nebo editorem. Bez LSP jsou jazykové služby typicky implementované pomocí rozhraní API rozšíření specifického pro daný nástroj. Poskytnutí stejné jazykové služby jinému editačnímu nástroji vyžaduje úsilí k přizpůsobení stávajícího kódu tak, aby služba mohla cílit na rozhraní rozšíření druhého editoru.
LSP umožňuje pro oddělit jazykové služby od editoru, takže služby mohou být soustředěny v univerzálním jazykovém serveru. Jakýkoli editor může získat sofistikovanou podporu pro mnoho různých jazyků využitím existujících jazykových serverů. Podobně programátor zapojený do vývoje nového programovacího jazyka může zpřístupnit služby pro tento jazyk stávajícím editačním nástrojům. Využití jazykových serverů pomocí LSP tak také snižuje nároky na dodavatele editačních nástrojů, protože dodavatelé nemusí vyvíjet vlastní jazykové služby pro jazyky, které hodlají podpoovat, pokud již byly jazykové implementovány. LSP také umožňuje distribuci a vývoj serverů poskytovaných zainteresovanými třetími stranami, jako jsou koncoví uživatelé, bez dalšího zapojení dodavatele překladače programovacího jazyka nebo dodavatele editoru, do kterého se přidává jazyková podpora.
LSP není omezené na programovací jazyky, ale lze jej používat pro jakýkoli druh textového jazyka, jako jsou specifikace nebo doménově specifické jazyky (DSL).
Technický úvod Když uživatel upravuje jeden nebo více souborů se zdrojovým kódem pomocí nástroje podporujícího LSP, funguje tento nástroj jako klient, který využívá jazykové služby poskytované jazykovým serverem. Tímto nástrojem může být textový editor nebo integrované vývojové prostředí (IDE) a jazykové služby mohou zahrnovat refactoring, doplňování kódu atd.
Klient informuje server o tom, co uživatel právě dělá, například že otevírá soubor nebo vkládá znak na určité pozici v textu. Klient může také požádat server o provedení jazykové služby, např. o zformátování určité části textu dokumentu. Server odpoví na požadavek klienta vhodnou odpovědí. Například na požadavek na zformátování se odpoví buď odpovědí, která přenese formátovaný text klientovi, nebo chybovou odpovědí obsahující podrobnosti o chybě.
LSP definuje zprávy, které si vyměňuje klient a jazykový server. Jsou to JSON-RPC, kterým předcházejí hlavičky podobné HTTP. Zprávy mohou pocházet jak od serveru tak od klienta.
Protokol nestanovuje žádné podmínky na způsob přenosu požadavků, odpovědí a oznámení mezi klientem a serverem. Klient a server mohou být například komponenty v rámci stejného procesu, které si vyměňují řetězce JSON prostřednictvím volání metod. Mohou to být také různé procesy na stejném nebo na různých počítačích, které komunikují prostřednictvím síťových soketů.
Registr Seznamy implementací kompatibilních s LSP spravuje komunitní projekt langserver.org nebo společnost Microsoft.
Odkazy Reference
Literatura
Externí odkazy
Kategorie:Komunikační protokoly Kategorie:Otevřené standardy Kategorie:Programovací software