語言服務器協議(LSP)是Visual Studio Code的一個重要組件。語言服務器實際上是單獨運行的編譯器或分析器,它負責處理各種任務,如編譯器錯誤報告、文本懸浮、代碼自動完成(也就是IntelliSense),等。
語言服務器并不是個新概念,Vim和Emacs早就在用它實現代碼自動完成功能。C#的語言服務器叫作OmniSharp,支持VS Code、Sublime、Atom、Emacs、Vim和Brackets。
VS Code為TypeScript實現了另一種語言服務器。與OmniSharp不同的是,它是基于HTTP的,“通過標準輸入和輸出與服務器進程打交道,并使用了JSON消息格式,類似V8調試器協議的請求和響應”。
VS Code現在有兩種語言服務器,微軟認為有必要制定一個通用的標準,現有和未來的新語言共同遵循該標準。于是,語言服務器協議出現了。
語言服務器協議采用JSON-RPC作為最基本的消息格式。JSON-RPC是SOAP的替代品,更為輕量級。與SOAP類似,它對傳輸層沒有特殊的要求,因此可以通過標準輸入輸出、管道、套接字等方式進行傳輸。
Visual Studio本身不支持語言服務器協議,所以需要使用適配器,讓VS語言服務與LSP客戶端發生交互。微軟開發實驗室提供了一個叫作語言服務器協議客戶端的工具。
除了客戶端工具,可能還需要一個語言擴展。GitHub上的語言服務器協議示例演示了如何創建語言擴展。
Adam Driscoll提供了一個更為復雜的示例,叫作PowerShell的Visual Studio語言服務器協議擴展。Adam說:
我認為未來要支持更多的語言需要依賴LSP客戶端。Visual Studio和Visual Studio Code共享同一個語言服務,這是一個大好局面。但我們還可以做得更好。LSP現在不支持調試。它是一種特殊的協議。LSP在Visual Stuido中還不夠完善,文檔中已經有一個圖表說明了這個問題。要完善它尚需時日。查看英文原文:Language Server Protocol Support for Visual Studio