Microsoft已將VS Code編輯器用于與各種可支持的語(yǔ)言服務(wù)器進(jìn)行通信的協(xié)議開(kāi)源。
Visual Studio Code是一個(gè)由Microsoft開(kāi)發(fā)的IDE,支持超過(guò)150種語(yǔ)言。為支持多種語(yǔ)言,該IDE包含了Monaco Editor以及用于語(yǔ)法檢查、錯(cuò)誤報(bào)告等功能的代碼驗(yàn)證工具,并通過(guò)語(yǔ)言服務(wù)器提供了智能感知和重構(gòu)等功能。通常每種可支持的編程語(yǔ)言需要一個(gè)這樣的服 務(wù)器,Monaco與這些服務(wù)器之間的通信是通過(guò)語(yǔ)言服務(wù)器協(xié)議(LSP)實(shí)現(xiàn)的,Microsoft最近已將LSP開(kāi)源。
代碼驗(yàn)證是一種需要投入大量資源的操作,因此語(yǔ)言服務(wù)器會(huì)通過(guò)一個(gè)獨(dú)立的進(jìn)程執(zhí)行。語(yǔ)言服務(wù)器可使用多種語(yǔ)言編寫(xiě),并使用一種基于JSON-RPC 的輕量級(jí)協(xié)議通過(guò)stdin/stdout與編輯器交換信息。根據(jù)正在與Microsoft合作開(kāi)發(fā)Visual Studio的計(jì)算機(jī)科學(xué)家Erich Gamma介紹,該協(xié)議受到了來(lái)自V8調(diào)試器協(xié)議的啟發(fā)。
與HTTP類(lèi)似,LSP也包含一個(gè)頁(yè)頭區(qū),隨后是JSON-RPC內(nèi)容區(qū),代碼片段如下所示:
Content-Length: ... { "jsonrpc": "2.0", "id": 1, "method": "textDocument/didOpen", "params": { ... }}
頁(yè)頭區(qū)可包含兩個(gè)用于指定內(nèi)容長(zhǎng)度和類(lèi)型的字段。內(nèi)容可由發(fā)往語(yǔ)言服務(wù)器的請(qǐng)求或從語(yǔ)言服務(wù)器收到的響應(yīng)所代表。這一區(qū)域可用于發(fā)送消息、通知,以 及命令。通過(guò)指定可支持的能力,語(yǔ)言服務(wù)器可以對(duì)代碼驗(yàn)證功能可以使用的特性進(jìn)行擴(kuò)展。由于可以同時(shí)向不同語(yǔ)言服務(wù)器發(fā)送多個(gè)請(qǐng)求,每個(gè)數(shù)據(jù)包都包含一個(gè) ID字段,借此編輯器可以區(qū)分不同的回應(yīng)。
LSP實(shí)現(xiàn)了編輯器和所用語(yǔ)言服務(wù)器之間的解耦,這樣就可以在一個(gè)IDE種使用多個(gè)服務(wù)器,或在支持某一協(xié)議的多個(gè)IDE之間重用同一個(gè)語(yǔ)言服務(wù) 器。Microsoft和其他供應(yīng)商已經(jīng)為C++、CSS/LESS/SASS、JSON、PowerShell、Xtext、PHP等語(yǔ)言創(chuàng)建了服務(wù) 器。Eclipse Che也已選擇了LSP并計(jì)劃借此提供針對(duì)C/C++、C#、Go、JSON、R、TypeScript、RAML以及XML的支持。Red Hat將為Eclipse Che提供Java語(yǔ)言服務(wù)器。此外還有適用于C#、Haxe、Java和Node.js的SDK。
分享到微信 ×
打開(kāi)微信,點(diǎn)擊底部的“發(fā)現(xiàn)”,
使用“掃一掃”即可將網(wǎng)頁(yè)分享至朋友圈。