Visual Studio Code 中的 Ruby
Ruby 是一种动态、开源的编程语言,以其简洁性和生产力而闻名。Ruby 具有富有表现力且优雅的语法,其理念的一部分是让开发人员感到快乐。它通常用于使用各种不同框架的 Web 开发,以及脚本编写,从而在构建原型时实现快速迭代。
本主题详细介绍了如何在 Visual Studio Code 中设置和使用 Ruby,并结合 Ruby LSP 扩展。
安装
通过版本管理器安装 Ruby
虽然某些操作系统(例如 macOS 和 Linux 的某些发行版)默认安装了 Ruby,但我们建议使用版本管理器(例如 rbenv),以便能够在 Windows、macOS 和 Linux 上访问较新版本的 Ruby。请按照您的平台的安装指南进行操作。
注意:与在您的机器上安装任何新工具集一样,您需要确保重启您的终端/命令提示符和 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
文件夹,其中包含一个自定义捆绑包,其中包括语言服务器 gem ruby-lsp
。应该不需要任何配置。
默认情况下,该扩展会尝试自动检测您正在使用的 Ruby 版本管理器,并相应地使用正确的版本和路径。如果您想自定义该行为,请在您的用户设置中设置以下配置
{
"rubyLsp.rubyVersionManager": {
"identifier": "rbenv"
}
}
该扩展将自动尝试定期更新 ruby-lsp
语言服务器 gem;如果您想强制执行此操作,请使用命令面板(⇧⌘P (Windows、Linux Ctrl+Shift+P))执行Ruby LSP: 更新语言服务器 gem。
如果您有任何问题,请参阅故障排除以获取后续步骤。
主要功能
导航和 IntelliSense
Ruby LSP 提供多种导航和 IntelliSense 相关功能,例如转到定义、悬停、工作区符号、文档符号、完成和签名帮助。
要了解有关在 VS Code 中快速浏览源代码的更多信息,请查看代码导航。
内嵌提示
Ruby LSP 能够显示有关代码中推断或隐式值的有用信息。在下面的示例中,您可以看到 StandardError
显示为在空的 rescue
调用中被 rescue 的隐式异常类。
虽然内嵌提示对于理解您的代码很有帮助,但您也可以通过编辑器 > 内嵌提示: 已启用设置(editor.inlayHints.enabled)禁用该功能,或者使用以下方法仅为 Ruby LSP 禁用此功能
"rubyLsp.enabledFeatures": {
"inlayHint": false,
}
语义语法高亮
由于 Ruby LSP 对项目源代码的深入理解,它能够使用语义语法高亮和样式。
例如,它可以高亮显示
- 方法调用保持一致,而不会与局部变量混淆。
- 局部参数(例如方法、块或 lambda 参数)在其存在的范围内保持一致。
注意:此屏幕截图使用的是 Ruby 扩展包中包含的 Spinel 主题。主题必须使用 Ruby LSP 公开的信息,才能为 Ruby 文件提供丰富的高亮显示。
要使用此功能,编辑器必须启用语义高亮显示。
"editor.semanticHighlighting.enabled": true,
Linting 和格式化
默认情况下,Ruby LSP 通过与 RuboCop 集成来提供 linting 和格式化。您可以使用 ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) 格式化您的 Ruby 文件,或者从命令面板(⇧⌘P (Windows、Linux Ctrl+Shift+P))或编辑器中的上下文菜单运行格式化文档命令。
如果您的项目未使用 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.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)来开始调试。
后续步骤
这是一个简要概述,展示了 VS Code 中 Ruby LSP 扩展的功能。有关更多信息,请参阅 Ruby LSP 文档中提供的详细信息,包括如何调整特定的 VS Code 编辑器配置。
要及时了解 Ruby LSP 扩展的最新功能/错误修复,请参阅 monorepo 的发布页面,其中包括服务器和 VS Code 扩展实现。
如果您有任何问题或功能请求,请随时在 Ruby LSP 的 GitHub 存储库中记录它们。
如果您想了解有关 VS Code 的更多信息,请尝试以下主题
- 基本编辑 - 快速介绍 VS Code 编辑器的基础知识。
- 安装扩展 - 了解 Marketplace 中提供的其他扩展。
- 代码导航 - 快速浏览您的源代码。