lsp语言服务器,身为程序员还不知道?Xtext与LSP让一个语言服务器横扫多个IDE!-lsp文件...
Xtext與LSP的組合是向多個IDE添加語言支持的可行方法。語言服務(wù)器協(xié)議有很多說法:它允許使用多種語言編寫,并使用一種基于JSON-RPC的輕量級協(xié)議通過stdin/stdout與編輯器交換信息。雖然最初設(shè)計(jì)用于Visual Studio代碼,但現(xiàn)在許多編輯器都開始支持,并出現(xiàn)了許多用于多種語言的語言服務(wù)器。
本文將展示一個YANG語言的單一語言服務(wù)器,它使用Xtext實(shí)現(xiàn),連接三個不同的編輯器客戶端:VSCode,Theia IDE和Eclipse。由于Theia允許兩者兼容:一個基于瀏覽器的IDE和一個基于Electron的rich-client,這產(chǎn)生了四種不同類型的IDE。所有資源均在Github上公開提供。
YANG語言服務(wù)器
YANG是一種數(shù)據(jù)建模語言,用于對由NETCONF協(xié)議、遠(yuǎn)程過程調(diào)用和通知操縱的配置和狀態(tài)數(shù)據(jù)進(jìn)行建模。
在項(xiàng)目yang-lsp中,我們使用Xtext實(shí)現(xiàn)了一個YANG語言服務(wù)器。Xtext生成一個LSP很簡單,幾乎和其他所有語言一樣,YANG有一些定制,諸如驗(yàn)證、范圍界定和格式化這樣的服務(wù)pecularites。為了改善用戶體驗(yàn),團(tuán)隊(duì)還調(diào)整了一些語言服務(wù)器IDE服務(wù),如內(nèi)容輔助、代碼lens、符號等。Xtext的依賴注入使得這樣的定制變得容易。然而,額外的努力是希望避免使用相應(yīng)的本機(jī)API重做每個IDE。
YANG語言服務(wù)器是用Xtend(Java方言)編寫的,所以用戶必須運(yùn)行Gradle來構(gòu)建它。語言服務(wù)器通常在自己的進(jìn)程中運(yùn)行,因此構(gòu)建還會創(chuàng)建一些腳本來啟動LS。然后,運(yùn)行的服務(wù)器通過標(biāo)準(zhǔn)輸入/輸出或套接字連接到客戶端。
The YANG editor in VSCode
VSCode客戶端
VSCode是Microsoft的可擴(kuò)展,輕量級的開源IDE。在yang-vscode中,我們基于yang-lsp實(shí)現(xiàn)了VSCode的擴(kuò)展。它主要由以下部分組成:啟動語言服務(wù)器的方法
配置的語法高亮和括號匹配,在VSCode中始終由客戶端完成
VSCode擴(kuò)展的配置文件
用戶可以直接從VSCode市場安裝yang擴(kuò)展。如果要從源代碼構(gòu)建它,必須將yang-lsp項(xiàng)目簽出并輕松構(gòu)建在yang-vscode repo旁邊的文件夾中,因?yàn)樗鼘⒃跇?gòu)建期間復(fù)制。
The YANG editor in Theia (browser mode)
Theia客戶端
Theia是在瀏覽器或rich-client使用相同代碼運(yùn)行的IDE新框架。它是用TypeScript編寫的,對LSP有一級支持,并使用Microsoft的編輯器小部件Monaco。Theia尚未正式發(fā)布,但預(yù)計(jì)將于2017年12月推出beta 1.0。
項(xiàng)目yangster包含YIA語言的Theia擴(kuò)展。該項(xiàng)目包含各種npm軟件包,并以其他方式連接為Git子模塊。雖然這個設(shè)置看起來很復(fù)雜,乍一看,它可以同時在YANG,Theia和sprotty上工作。與VSCode擴(kuò)展一樣,yang-lsp將在構(gòu)建期間從相鄰目錄復(fù)制。
核心包是theia-yang擴(kuò)展:它將YANG特定服務(wù)的綁定添加到Theia的DI容器,注冊上下文菜單,并為前端設(shè)置語法高亮。它還可以在后臺啟動語言服務(wù)器。
The YANG editor in Theia (electron mode)
Eclipse客戶端
最后但并非不重要的是,團(tuán)隊(duì)將yang-lsp集成到Eclipse中。這里使用lsp4e,允許通用的Eclipse編輯器由語言服務(wù)器支持。項(xiàng)目yang-eclipse主要包含適應(yīng)lsp4e的插件,即啟動yang-lsp,
使用TextMate語法定義語法高亮,以及添加一些漂亮的圖標(biāo)。
請注意,雖然客戶端也是在Xtend /Java中編寫的,但在單獨(dú)的進(jìn)程中使用與上述相同的機(jī)制啟動語言服務(wù)器。
The YANG editor in Eclipse
當(dāng)然,Xtext也可以生成一個本機(jī)Eclipse編輯器,通常會有更多功能和更好的用戶體驗(yàn)。此次避免使用這種方法,不僅僅是為了在Eclipse中演示一個LSP,而且還因?yàn)椴坏貌皇褂帽緳C(jī)Eclipse API重新實(shí)現(xiàn)一些IDE功能,因此需要保留兩倍的代碼。
tl;dr
本文介紹了在Xtext中實(shí)現(xiàn)的單一語言服務(wù)器如何將YANG語言的支持添加到四個不同的IDE中。只需要一些IDE特定樣板,主要是啟動服務(wù)器并實(shí)現(xiàn)被LSP視為客戶端的服務(wù),如語法高亮。
除此之外,對于Emacs,vim和更多的編輯器,以同樣的方式來服務(wù)這些應(yīng)該很容易。
總結(jié)
以上是生活随笔為你收集整理的lsp语言服务器,身为程序员还不知道?Xtext与LSP让一个语言服务器横扫多个IDE!-lsp文件...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebService入门
- 下一篇: 3.算法的渐进分析