Visual Studio Code 中的 Ruby
Ruby 是一種動態、開源的程式語言,以其簡潔和高效而聞名。Ruby 的開發理念是透過富有表現力和優雅的語法來取悅開發者。它經常用於 Web 開發,支援各種框架,也用於指令碼編寫,能夠快速迭代構建原型。
本主題將詳細介紹如何在 Visual Studio Code 中設定和使用 Ruby,並介紹 Ruby LSP 擴充套件。

安裝
透過版本管理器安裝 Ruby
雖然 Ruby 在某些作業系統(如 macOS 和部分 Linux 發行版)上是預設安裝的,但我們建議使用版本管理器來訪問較新版本的 Ruby,例如 macOS 和 Linux 上的 rbenv 和 Windows 上的 rbenv。請遵循你平臺的 安裝指南。
注意:與在計算機上安裝任何新工具集一樣,你需要確保重啟終端/命令提示符和 VS Code 例項,以便你的平臺的 PATH 變數可以使用更新後的工具集位置。
在 VS Code 中安裝 Ruby LSP 擴充套件
你可以在 VS Code 的“擴充套件”檢視(⇧⌘X (Windows、Linux Ctrl+Shift+X))中搜索“Ruby LSP”來找到並安裝它。

我們將在本主題中討論 Ruby LSP 的許多功能,但你也可以參考該擴充套件的 文件和 倉庫。
檢查你的安裝
安裝後,請檢查**狀態列**中的語言狀態項,以檢視 Ruby LSP 伺服器的狀態。如果已配置版本管理器,它應該會顯示你專案正確的 Ruby 版本。伺服器狀態應顯示“正在啟動”或“正在執行”,而不是錯誤。

該擴充套件會自動生成一個 .ruby-lsp 資料夾,其中包含一個自定義包,其中包含語言伺服器 gem ruby-lsp。無需進行任何配置。
預設情況下,該擴充套件會嘗試自動檢測你使用的 Ruby 版本管理器,並相應地使用正確的版本和路徑。如果你想自定義此行為,請在你的使用者 設定中設定以下配置:
{
"rubyLsp.rubyVersionManager": {
"identifier": "rbenv"
}
}
該擴充套件會定期自動嘗試更新 ruby-lsp 語言伺服器 gem;如果你想強制更新,請使用命令面板(⇧⌘P (Windows、Linux Ctrl+Shift+P))執行 **Ruby LSP: Update language server gem**。
如果遇到任何問題,請參閱 故障排除 以獲取後續步驟。
主要功能
導航和 IntelliSense
Ruby LSP 提供了多種導航和 IntelliSense 相關功能,例如跳轉到定義、懸停、工作區符號、文件符號、自動補全和簽名幫助。
要了解更多關於使用 VS Code 在原始碼中快速移動的資訊,請檢視 程式碼導航。
內聯提示
Ruby LSP 能夠顯示有關程式碼中推斷值或隱式值的有用資訊。在下面的示例中,你可以看到在空的 rescue 呼叫中,StandardError 被顯示為正在捕獲的隱式異常類。

雖然內嵌提示有助於理解程式碼,但你也可以透過“編輯器 > 內嵌提示: 已啟用”設定(editor.inlayHints.enabled)停用該功能,或者使用以下設定僅為 Ruby LSP 停用此功能:
"rubyLsp.enabledFeatures": {
"inlayHint": false,
}
語義語法高亮
Ruby LSP 能夠利用其對專案原始碼的深刻理解,提供 語義語法高亮顯示和樣式。
例如,它可以高亮顯示:
- 方法呼叫,保持一致,不會將其與區域性變數混淆。
- 區域性引數(如方法、塊或 lambda 引數),在其存在的範圍內保持一致。

注意:此螢幕截圖使用的是 Ruby 擴充套件包 中包含的 Spinel 主題。主題必須使用 Ruby LSP 提供的[_資訊](https://shopify.github.io/ruby-lsp/configuration.html#semantic-highlighting)才能為 Ruby 檔案提供豐富的語法高亮。
要使用此功能,必須在編輯器中啟用語義高亮顯示。
"editor.semanticHighlighting.enabled": true,
程式碼檢查和格式化
預設情況下,Ruby LSP 透過與 RuboCop 整合提供程式碼檢查和格式化。你可以使用 ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) 格式化你的 Ruby 檔案,或者從命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))或編輯器中的上下文選單執行 **Format Document** 命令。
如果你的專案不使用 RuboCop,Ruby LSP 將使用 SyntaxTree 來格式化檔案。

你還可以設定每次儲存時都執行格式化程式(“編輯器: 儲存時格式化”),以便在工作時自動保持 Ruby 程式碼的正確格式。要做到這一點,你必須啟用“儲存時格式化”。
"editor.formatOnSave": true
Ruby LSP 擴充套件還透過鍵入時格式化提供了一些便捷的自動補全功能。例如,它會自動延續註釋行,並自動關閉 end 關鍵字、管道符或字串插值的大括號。要使用鍵入時格式化,請確保在編輯器中啟用它:
"editor.formatOnType": true
快速修復
當 linter 在你的原始碼中發現錯誤和警告時,Ruby LSP 通常可以提供建議的快速修復(也稱為程式碼操作),這些可以透過編輯器中的燈泡懸停來獲得。你可以透過 ⌘. (Windows, Linux Ctrl+.) 快速開啟可用的快速修復。

此外,程式碼操作小元件:包含附近的快速修復 (editor.codeActionWidget.includeNearbyQuickFixes) 是一個預設啟用的設定,它會從 ⌘. (Windows、Linux 為 Ctrl+.) (命令 ID editor.action.quickFix) 啟用一行中最近的快速修復,無論您的游標在該行的哪個位置。
該命令會突出顯示將透過快速修復進行重構或修復的原始碼。普通程式碼操作和非修復重構仍可在游標位置啟用。
重構
除了快速修復之外,Ruby LSP 還透過程式碼操作提供重構選項。例如,它可以將 Ruby 表示式提取到區域性變數中,只需單擊一次。

除錯
Ruby LSP 擴充套件支援使用 `debug` gem(Ruby 的官方偵錯程式)進行除錯。另外,開發者還可以安裝 VS Code RDBG 擴充套件來獲得除錯功能。
以下文件是針對 Ruby LSP 的偵錯程式客戶端。請參考 RDBG 的 README,瞭解如何配置它的說明。
除錯測試
Ruby LSP 在單元測試上方添加了 CodeLens 按鈕,使你能夠在測試資源管理器中執行示例、在新的終端中執行它們或啟動偵錯程式。對於這些用途,無需進行任何配置。

透過 launch 任務進行除錯
要透過 launch 任務使用偵錯程式,你需要在 launch.json 檔案中建立 除錯配置。該配置允許你配置要執行的程式。
為 Ruby 程式建立 launch.json 檔案:
- 在“除錯”檢視(⇧⌘D (Windows, Linux Ctrl+Shift+D))中,選擇“建立 launch.json 檔案”連結。
- 這將顯示一個包含多個預設 launch 配置型別的下拉選單。你可以選擇第一個選項,但我們還將新增更多配置。
- 現在我們可以編輯建立的
.vscode/launch.json檔案,以新增更多方式來啟動你的 Ruby 程式進行除錯。
示例
{
"version": "0.2.0",
"configurations": [
// Launch the debugger for any given program. In this case, it will run the current file using Ruby
{
"type": "ruby_lsp",
"name": "Debug",
"request": "launch",
"program": "ruby ${file}"
},
// Launch the debugger for the current test file
{
"type": "ruby_lsp",
"request": "launch",
"name": "Debug test file",
"program": "ruby -Itest ${relativeFile}"
},
// Attach the debugger client to an existing Ruby process that has already been launched with the debugger
// server
{
"type": "ruby_lsp",
"request": "attach",
"name": "Attach to existing server"
}
]
}
新增 launch 配置後,我們就可以透過新增斷點並執行 launch 任務來除錯 Ruby 程式了。
-
開啟一個 Ruby 檔案,然後在編輯器左側的裝訂線處單擊以設定斷點。它應該顯示為一個紅點。

-
透過在“執行和除錯”下選擇所需的任務並單擊啟動除錯按鈕(預設鍵盤快捷鍵 F5)來開始除錯。

後續步驟
以上是 VS Code 中 Ruby LSP 擴充套件功能的簡要概述。有關更多資訊,請參閱 Ruby LSP 文件中提供的詳細資訊,包括如何調整特定的 VS Code 編輯器配置。
要了解 Ruby LSP 擴充套件的最新功能/錯誤修復,請參閱包含伺服器和 VS Code 擴充套件實現的 monorepo 的“版本”頁面。
如果您有任何問題或功能請求,請隨時在 Ruby LSP 的 GitHub 倉庫中提出。
如果您想了解更多關於 VS Code 的資訊,請嘗試以下主題: