newsence
Show HN:使用支援 3.17 規範的 Go 語言建立完整的語言伺服器

Show HN:使用支援 3.17 規範的 Go 語言建立完整的語言伺服器

Hacker News·12 天前

一個名為 go-lsp 的新 Go 語言函式庫簡化了語言伺服器協定伺服器的構建過程,它負責處理 JSON-RPC 框架與訊息分發,並提供內建的偵錯介面來檢查流量。

背景

這篇文章介紹了由 Owen Rumney 開發的開源專案 go-lsp,這是一個專為 Go 語言設計的輔助函式庫,旨在簡化開發者構建符合 LSP 3.17 規範的語言伺服器流程。該工具處理了 JSON-RPC 框架、訊息分發與類型定義等底層細節,並內建強大的除錯介面與測試工具,讓開發者能將精力集中在特定語言的邏輯實現上。

社群觀點

Hacker News 的討論展現了開發者社群對 LSP 應用場景的高度興趣與創意。許多留言者對 go-lsp 直觀的介面設計與精美的除錯伺服器表示讚賞,認為這大幅降低了開發門檻。作者 Owen Rumney 透露,這套函式庫最初是為了 Infracost 的 LSP 需求而開發,目的是為了能同時支援多種 IDE 擴充功能,他認為語言伺服器本質上不一定非得是完整的程式語言處理器,也可以是解析 Terraform 或 Cloudformation 並回傳診斷資訊的實用工具。

社群中對於 LSP 的「非典型應用」展開了熱烈討論。有開發者分享曾利用 LSP 為大型專案中的專有 YAML 設定檔提供跳轉定義功能,甚至能針對拼字錯誤顯示紅色波浪線。另一位開發者則將其用於 SSH 設定檔,讓主機名稱變得可點擊,進而直接開啟終端機連線或顯示系統負載統計。這些案例說明了 LSP 的價值在於提供了一套與編輯器無關的互動機制,讓各種結構化資料都能享有現代 IDE 的便利性。

然而,討論中也出現了關於程式碼文件規範的技術爭論。針對程式碼中 DiagnosticSeverity 類型的註解,有網友質疑其內容過於直白且缺乏實質資訊,認為這種為了符合 Godoc 規範而撰寫的重複性註解是在浪費讀者時間,建議應補充更具體的細節,例如數值大小與嚴重程度的對應關係。對此,作者與其他開發者則辯護指出,Godoc 的格式要求註解必須以識別碼開頭並組成完整句子,這雖然有時會導致註解看起來較為生硬,但維持文件的一致性與完整性仍有其必要。

此外,也有開發者受到此專案啟發,考慮將 LSP 整合進現有的 CLI 框架中。既然命令列工具已經具備 Shell 補全功能,若能透過 go-lsp 輕鬆開發出對應的編輯器外掛,將能進一步提升開發者的使用體驗。整體而言,社群對此工具持正面態度,認為它不僅簡化了開發流程,更激發了關於編輯器互動性的更多想像。

延伸閱讀

  • warg:由 bbkane 開發的 Go 語言 CLI 框架,討論中提到可能與 LSP 結合的應用對象。
  • Infracost LSP:此函式庫的原始應用案例,用於雲端基礎設施成本估算。
https://github.com/owenrumney/go-lsp