Visual Studio的语言服务器协议
語(yǔ)言服務(wù)器協(xié)議(LSP)是Visual Studio Code的一個(gè)重要組件。語(yǔ)言服務(wù)器實(shí)際上是單獨(dú)運(yùn)行的編譯器或分析器,它負(fù)責(zé)處理各種任務(wù),如編譯器錯(cuò)誤報(bào)告、文本懸浮、代碼自動(dòng)完成(也就是IntelliSense)等。
語(yǔ)言服務(wù)器并不是個(gè)新概念,Vim和Emacs早就在用它實(shí)現(xiàn)代碼自動(dòng)完成功能。C#的語(yǔ)言服務(wù)器叫作OmniSharp,支持VS Code、Sublime、Atom、Emacs、Vim和Brackets。
VS Code為TypeScript實(shí)現(xiàn)了另一種語(yǔ)言服務(wù)器。與OmniSharp不同的是,它是基于HTTP的,“通過(guò)標(biāo)準(zhǔn)輸入和輸出與服務(wù)器進(jìn)程打交道,并使用了JSON消息格式,類似V8調(diào)試器協(xié)議的請(qǐng)求和響應(yīng)”。
VS Code現(xiàn)在有兩種語(yǔ)言服務(wù)器,微軟認(rèn)為有必要制定一個(gè)通用的標(biāo)準(zhǔn),現(xiàn)有和未來(lái)的新語(yǔ)言共同遵循該標(biāo)準(zhǔn)。于是,語(yǔ)言服務(wù)器協(xié)議出現(xiàn)了。
語(yǔ)言服務(wù)器協(xié)議采用JSON-RPC作為最基本的消息格式。JSON-RPC是SOAP的替代品,更為輕量級(jí)。與SOAP類似,它對(duì)傳輸層沒(méi)有特殊的要求,因此可以通過(guò)標(biāo)準(zhǔn)輸入輸出、管道、套接字等方式進(jìn)行傳輸。
Visual Studio本身不支持語(yǔ)言服務(wù)器協(xié)議,所以需要使用適配器,讓VS語(yǔ)言服務(wù)與LSP客戶端發(fā)生交互。微軟開(kāi)發(fā)實(shí)驗(yàn)室提供了一個(gè)叫作語(yǔ)言服務(wù)器協(xié)議客戶端的工具。
除了客戶端工具,可能還需要一個(gè)語(yǔ)言擴(kuò)展。GitHub上的語(yǔ)言服務(wù)器協(xié)議示例演示了如何創(chuàng)建語(yǔ)言擴(kuò)展。
Adam Driscoll提供了一個(gè)更為復(fù)雜的示例,叫作PowerShell的Visual Studio語(yǔ)言服務(wù)器協(xié)議擴(kuò)展。Adam說(shuō):
我認(rèn)為未來(lái)要支持更多的語(yǔ)言需要依賴LSP客戶端。Visual Studio和Visual Studio Code共享同一個(gè)語(yǔ)言服務(wù),這是一個(gè)大好局面。但我們還可以做得更好。LSP現(xiàn)在不支持調(diào)試。它是一種特殊的協(xié)議。LSP在Visual Stuido中還不夠完善,文檔中已經(jīng)有一個(gè)圖表說(shuō)明了這個(gè)問(wèn)題。要完善它尚需時(shí)日。
原文:?http://www.infoq.com/cn/news/2017/12/LSP-Visual-Studio
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的Visual Studio的语言服务器协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .net core 实现简单爬虫—抓取博
- 下一篇: Unity/DotNetty中集成Lid