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.fullstack.org.cn/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 的信息,请尝试以下主题: