Language Server Protocol
Főnév
Language Server Protocol (tsz. Language Server Protocols)
- (informatika) A Language Server Protocol (LSP) egy nyílt szabvány, amelyet a Microsoft fejlesztett ki azért, hogy elválassza a programozási nyelvhez kapcsolódó funkcionalitásokat a szerkesztőtől vagy IDE-től. Az LSP célja, hogy egységes kommunikációs csatornát biztosítson az editorok és a „nyelvi szerverek” (pl. Clangd, Pyright, Rust Analyzer) között, így a kódolási élmény gazdagabb és nyelvfüggetlen módon bővíthető.
🧠 Mi az LSP lényege?
Hagyományosan minden IDE-nek saját módon kellett implementálnia a különféle nyelvi szolgáltatásokat (pl. autocompletion, goto-definition, linting). Ez sok duplikált munkát jelentett, és a nyelv/IDE kombinációk skálázódása nehéz volt.
Az LSP egy közös nyelvet ad: 🔧 A nyelvi funkciókat egy külön Language Server valósítja meg. 📝 A szerkesztő (pl. VSCode, Neovim, Emacs) ezzel standardizált protokollon keresztül kommunikál.
Ezáltal a kódintelligencia újrafelhasználható több editorban is ugyanazzal a háttérszerverrel.
🧩 Példák nyelvi szerverekre
| Nyelv | LSP Szerver |
|---|---|
| C/C++ | Clangd, ccls |
| Python | Pyright, pylsp |
| TypeScript | typescript-language-server |
| Rust | rust-analyzer |
| Go | gopls |
| Java | Eclipse JDT Language Server |
| Haskell | Haskell Language Server |
🔌 Hogyan működik?
- Editor elindítja a nyelvi szervert.
- A szerver JSON-RPC protokollon keresztül kommunikál az editorral (általában stdio vagy TCP).
- Az editor küld eseményeket (pl. fájl megnyitása, kurzor mozgatása).
- A szerver válaszol: javaslatokat, hibákat, információkat ad vissza.
📦 Példák LSP funkciókra
- textDocument/completion – automatikus kiegészítés
- textDocument/hover – lebegő dokumentáció megjelenítése
- textDocument/definition – ugrás definícióhoz
- textDocument/references – hivatkozások keresése
- workspace/symbol – projektbeli szimbólumok listázása
- textDocument/formatting – kódformázás
Ezek mind LSP-üzenet típusok, amiket a szerkesztő küld a nyelvi szervernek, és az válaszol.
⚙️ Kommunikációs forma
Az LSP kommunikáció általában JSON-RPC 2.0 formátumot követ. Példa egy „go to definition” kérésre:
{
"jsonrpc": "2.0",
"id": 1,
"method": "textDocument/definition",
"params": {
"textDocument": { "uri": "file:///foo.cpp" },
"position": { "line": 12, "character": 8 }
}
}
A válasz tartalmazza a fájl pozícióját, ahová ugrani kell.
🛠️ Fejlesztői előnyök
- Nyelv szerver írása: A nyelvi szerver írójának nem kell minden szerkesztőhöz külön támogatást írnia.
- Editor fejlesztője: Elég egyszer megvalósítani az LSP támogatást → működni fog minden nyelvhez, amelynek van szervere.
- Közösség: LSP támogatás gyorsan nő minden editorban, legyen az VS Code, Neovim, Emacs, Sublime stb.
🧱 LSP komponensek
- Client (pl. VSCode, Neovim) – Felhasználói interakciókat figyel.
- Server (pl. Clangd, Pyright) – Elemzi a kódot, visszajelzést ad.
- Transport layer – stdio, TCP, WebSocket (WebAssembly környezetekben is!)
- Protokoll – JSON-RPC + szabványosított LSP parancsok
📚 Specifikáció és dokumentáció
Az LSP hivatalos specifikációja itt érhető el: 🔗 https://microsoft.github.io/language-server-protocol
A protokoll verziózott, és folyamatosan bővül új képességekkel: pl. semantic tokens, inlay hints, progress reporting stb.
🔄 Workflow áttekintés
+-------------+ JSON-RPC +-------------+
| VSCode | <---------------------> | Clangd |
| (Editor) | | (LSP Server)|
+-------------+ +-------------+
↑ ↓
Text document open Analyze file
Cursor moved Provide suggestions
User requests info Send documentation
💬 LSP az editorban
A legtöbb modern szerkesztő LSP pluginekkel használható:
- VS Code – beépített támogatás (extensionön keresztül)
- Neovim –
:LspStart,nvim-lspconfig,coc.nvim - Emacs –
lsp-mode,eglot - Sublime Text –
LSPplugin
📌 Záró gondolat
A Language Server Protocol forradalmasította a programozási nyelv támogatásának megközelítését: nem nyelv- vagy editor-specifikus, hanem egységes, újrafelhasználható komponensre épül. Ha egy editor támogatja az LSP-t, és van megfelelő nyelvi szerver, akkor azonnal profi szintű fejlesztői élményt nyújthat — anélkül, hogy a szerkesztőt vagy a nyelvet külön konfigurálni kellene.
- Language Server Protocol - Szótár.net (en-hu)
- Language Server Protocol - Sztaki (en-hu)
- Language Server Protocol - Merriam–Webster
- Language Server Protocol - Cambridge
- Language Server Protocol - WordNet
- Language Server Protocol - Яндекс (en-ru)
- Language Server Protocol - Google (en-hu)
- Language Server Protocol - Wikidata
- Language Server Protocol - Wikipédia (angol)