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