在 Visual Studio Code 中使用 Ruby
Ruby 是一种动态、开源的编程语言,以其简洁和高效而闻名。Ruby 的部分理念是通过富有表现力且优雅的语法让开发者感到快乐。它常用于各种不同框架的 Web 开发,以及脚本编写,从而在构建原型时实现快速迭代。
本主题详细介绍了如何在 Visual Studio Code 中通过 Ruby LSP 扩展来设置和使用 Ruby。
安装
通过版本管理器安装 Ruby
尽管某些操作系统(如 macOS 和一些 Linux 发行版)默认安装了 Ruby,但我们建议使用版本管理器来安装更新的 Ruby 版本,例如在 macOS 和 Linux 上使用 rbenv,在 Windows 上使用 rbenv on Windows。请遵循您所用平台的安装指南进行操作。
注意:与在您的计算机上安装任何新工具集一样,您需要重启您的终端/命令提示符和 VS Code 实例,以便在您平台的 PATH 变量中使用更新后的工具集路径。
在 VS Code 中安装 Ruby LSP 扩展
您可以在 VS Code 内部通过扩展视图 (⇧⌘X (Windows、Linux Ctrl+Shift+X)) 搜索“Ruby LSP”来找到并安装 Ruby LSP 扩展。
我们将在本主题中讨论 Ruby LSP 的许多功能,但您也可以参考该扩展的文档和 代码仓库。
检查您的安装
安装后,检查状态栏中的语言状态项,以查看 Ruby LSP 服务器的状态。如果版本管理器已正确配置,它应该会显示您项目的正确 Ruby 版本。服务器状态应显示为“starting”或“running”,而不是“error”。
该扩展会自动生成一个 .ruby-lsp
文件夹,其中包含一个自定义的 bundle,内含语言服务器 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 提供了多种与导航和智能感知相关的功能,例如“转到定义”、“悬停提示”、“工作区符号”、“文档符号”、“自动补全”和“签名帮助”。
要了解更多关于如何使用 VS Code 快速浏览源代码的信息,请查看代码导航。
内联提示
Ruby LSP 能够显示有关代码中推断或隐式值的有用信息。在下面的示例中,您可以看到在一个空的 rescue
调用中,StandardError
被显示为正在被捕获的隐式异常类。
虽然内联提示有助于理解代码,但您也可以通过 Editor > Inlay Hints: Enabled 设置 (editor.inlayHints.enabled) 禁用此功能,或使用以下配置仅为 Ruby LSP 禁用此功能:
"rubyLsp.enabledFeatures": {
"inlayHint": false,
}
语义语法高亮
得益于对项目源代码的深入理解,Ruby LSP 能够使用语义语法高亮和样式。
例如,它可以高亮显示:
- 方法调用,并能与局部变量明确区分。
- 局部参数(例如方法、块或 lambda 的参数),在其作用域内保持一致的高亮。
注意:此屏幕截图使用的是 Ruby 扩展包中包含的 Spinel 主题。主题必须利用 Ruby LSP 提供的信息才能为 Ruby 文件提供丰富的高亮效果。
要使用此功能,编辑器必须启用语义高亮。
"editor.semanticHighlighting.enabled": true,
代码检查与格式化
默认情况下,Ruby LSP 通过与 RuboCop 的集成提供代码检查和格式化功能。您可以使用快捷键 ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) 来格式化您的 Ruby 文件,或者从命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 或编辑器的上下文菜单中运行“格式化文档”命令。
如果您的项目不使用 RuboCop,Ruby LSP 将使用 SyntaxTree 来格式化文件。
您还可以在每次保存时运行格式化程序 (Editor: Format On Save),以便在工作时自动保持 Ruby 代码的正确格式。为此,您必须启用保存时格式化。
"editor.formatOnSave": true
Ruby LSP 扩展还通过“键入时格式化”提供了一些便捷的补全功能。例如,它会自动延续注释行,并自动闭合 end
标记、管道符或字符串插值的大括号。要使用“键入时格式化”,请确保在编辑器中通过以下设置启用了它:
"editor.formatOnType": true
快速修复
当代码检查器在您的源代码中发现错误和警告时,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.json
文件中创建调试配置。该配置允许您设置要执行的程序。
为 Ruby 程序创建 launch.json
文件:
- 在调试视图 (⇧⌘D (Windows, Linux Ctrl+Shift+D)) 中,选择“创建一个 launch.json 文件”链接。
- 这将显示一个包含多种默认启动配置类型的下拉菜单。您可以选择第一个选项,但我们稍后会添加更多配置。
- 我们现在可以编辑已创建的
.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"
}
]
}
添加启动配置后,我们可以通过添加断点和执行我们的启动任务来调试 Ruby 程序。
-
打开一个 Ruby 文件,在编辑器的左侧边栏单击以设置一个断点。它应显示为一个红点。
-
通过在“运行和调试”下选择所需的任务,然后单击开始调试按钮(默认键盘快捷键 F5)来开始调试。
后续步骤
以上简要概述了 Ruby LSP 扩展在 VS Code 中的功能。更多信息,请参阅 Ruby LSP 文档中提供的详细信息,包括如何调整特定的 VS Code 编辑器配置。
要了解 Ruby LSP 扩展的最新功能/错误修复,请查看 monorepo 的发布页面,其中包含了服务器和 VS Code 扩展的实现。
如果您有任何问题或功能请求,请随时在 Ruby LSP 的 GitHub 仓库中提交。
如果您想了解更多关于 VS Code 的信息,请尝试以下主题: