在 Visual Studio Code 中使用 Ruby
Ruby 是一种动态的开源编程语言,以其简单性和高生产力而闻名。Ruby 哲学的一部分是,通过其富有表现力且优雅的语法让开发者感到愉快。它经常与一系列不同的框架一起用于 Web 开发,也用于编写脚本,从而在构建原型时能够快速迭代。
本主题将详细介绍如何在 Visual Studio Code 中通过 Ruby LSP 扩展来设置和使用 Ruby。
安装
通过版本管理器安装 Ruby
虽然某些操作系统(如 macOS 和一些 Linux 发行版)默认安装了 Ruby,但我们建议使用版本管理器来安装更新版本的 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 LSP 服务器的状态。如果版本管理器已配置好,它应该会显示您项目正确的 Ruby 版本。服务器状态应显示为“正在启动”或“正在运行”,而不是“错误”。
该扩展会自动生成一个 .ruby-lsp
文件夹,其中包含一个自定义的 bundle,该 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 提供了多种与导航和 IntelliSense 相关的功能,例如“转到定义”、“悬停提示”、“工作区符号”、“文档符号”、“自动补全”和“签名帮助”。
要了解有关如何使用 VS Code 快速浏览源代码的更多信息,请查看代码导航。
内联提示
Ruby LSP 能够显示有关代码中推断或隐式值的有用信息。在下面的示例中,您可以看到 StandardError
被显示为在空的 rescue
调用中被救援的隐式异常类。
虽然嵌入提示有助于理解您的代码,但您也可以通过 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+.) 快速打开可用的“快速修复”。
此外,Code Action Widget: Include Nearby Quick Fixes (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 的信息,请尝试以下主题: