Visual Studio Code 中的 Ruby

Ruby 是一种动态的开源编程语言,以其简洁和高效而闻名。凭借其富有表现力和优雅的语法,Ruby 的哲学之一是让开发者感到愉快。它通常用于使用各种不同框架进行网页开发,以及用于脚本编写,使得在构建原型时能够快速迭代。

本主题详细介绍了如何在 Visual Studio Code 中设置和使用 Ruby,使用 Ruby LSP 扩展。

Ruby扩展横幅

安装

通过版本管理器安装Ruby

虽然某些操作系统(如macOS和一些Linux发行版)默认安装了Ruby,但我们建议使用版本管理器,例如rbenv,以便在Windows、macOS和Linux上访问较新的Ruby版本。请遵循适用于您平台的安装指南

注意:与在您的机器上安装任何新工具集一样,您需要确保重新启动终端/命令提示符和VS Code实例,以使用平台PATH变量中更新的工具集位置。

在VS Code中安装Ruby LSP扩展

你可以通过VS Code的扩展视图找到并安装Ruby LSP扩展 (⇧⌘X (Windows, Linux Ctrl+Shift+X)) 并搜索 'Ruby LSP'。

扩展视图中的Ruby LSP扩展

我们将在本主题中讨论许多Ruby LSP功能,但您也可以参考扩展的文档仓库

检查您的安装

安装后,检查语言状态项以查看Ruby LSP服务器的状态。如果版本管理器已配置,它应显示您项目的正确Ruby版本。服务器状态应显示为启动或运行,而不是错误。

Ruby LSP 语言状态中心

扩展会自动生成一个.ruby-lsp文件夹,其中包含一个自定义的bundle,该bundle包括语言服务器gem ruby-lsp。不需要进行任何配置。

默认情况下,扩展程序会尝试自动检测您正在使用的 Ruby 版本管理器,并相应地使用正确的版本和路径。如果您想自定义该行为,请在您的用户设置中设置以下配置:

{
  "rubyLsp.rubyVersionManager": {
    "identifier": "rbenv"
  }
}

扩展将自动尝试定期更新ruby-lsp语言服务器gem;如果你想强制更新,可以使用命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))来执行Ruby LSP: 更新语言服务器gem

如果您有任何问题,请参阅故障排除以获取后续步骤。

主要功能

导航与智能感知

Ruby LSP 提供了多种导航和智能感知相关的功能,例如转到定义、悬停、工作区符号、文档符号、补全和签名帮助。

要了解更多关于使用VS Code快速浏览源代码的信息,请查看代码导航

内嵌提示

Ruby LSP 能够显示有关代码中推断或隐式值的有用信息。在下面的示例中,您可以看到 StandardError 被显示为在空的 rescue 调用中被拯救的隐式异常类。

显示内嵌提示的Ruby程序

虽然内联提示有助于理解您的代码,您也可以通过编辑器 > 内联提示: 启用设置(editor.inlayHints.enabled)来禁用此功能,或者使用以下方法仅针对Ruby LSP禁用此功能:

"rubyLsp.enabledFeatures": {
    "inlayHint": false,
}

语义语法高亮

Ruby LSP 能够使用语义语法高亮和样式,因为它对项目源代码有深入的理解。

例如,它可以突出显示:

  • 方法调用一致,不会与局部变量混淆。
  • 局部参数(如方法、块或lambda参数)始终存在于它们所在的范围内。

Ruby LSP 语义高亮

注意: 此截图使用的是包含在Ruby扩展包中的Spinel主题。主题必须使用Ruby LSP提供的信息,以便为Ruby文件提供丰富的语法高亮。

要使用此功能,编辑器必须启用语义高亮显示。

"editor.semanticHighlighting.enabled": true,

代码检查和格式化

默认情况下,Ruby LSP 通过与 RuboCop 的集成提供代码检查和格式化功能。你可以使用 ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) 或通过从命令面板运行 格式化文档 命令 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 或编辑器中的上下文菜单来格式化你的 Ruby 文件。

如果你的项目不使用RuboCop,Ruby LSP将使用SyntaxTree来格式化文件。

Linting a Ruby file

翻译结果:

Linting a Ruby 文件

你也可以在每次保存时运行格式化程序(编辑器:保存时格式化),以便在你工作时自动保持你的Ruby代码格式正确。要做到这一点,你必须启用保存时格式化。

"editor.formatOnSave": true

Ruby LSP 扩展还提供了一些方便的自动格式化补全功能。例如,它会自动继续注释行并自动关闭 end 标记、管道或字符串插值的大括号。要使用自动格式化功能,请确保在编辑器中启用它:

"editor.formatOnType": true

快速修复

当linter在您的源代码中发现错误和警告时,Ruby LSP通常可以提供建议的快速修复(也称为代码操作),这些操作可以通过编辑器中的灯泡悬停来使用。您可以通过⌘.(Windows,Linux Ctrl+.快速打开可用的快速修复。

快速修复linting违规

此外,代码操作小部件:包括附近的快速修复 (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

  1. 在调试视图(⇧⌘D (Windows, Linux Ctrl+Shift+D))中,选择创建launch.json文件链接。
  2. 这将显示一个包含几种默认启动配置类型的下拉菜单。您可以选择第一个选项,但我们将添加更多配置。
  3. 我们现在可以编辑创建的.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程序。

  1. 打开一个Ruby文件并在编辑器中点击左侧的装订线来设置断点。它应该显示为一个红点。

    编辑器左侧装订线中的红色断点圆点

  2. 通过选择运行和调试下的所需任务并点击开始调试按钮(默认键盘快捷键 F5)来开始调试。

    调试会话在断点处停止

下一步

这是对VS Code中Ruby LSP扩展功能的简要概述。更多信息,请参阅Ruby LSP 文档中提供的详细信息,包括如何调整特定的VS Code编辑器配置。

要了解Ruby LSP扩展的最新功能/错误修复,请查看monorepo的发布页面,其中包括服务器和VS Code扩展的实现。

如果您有任何问题或功能请求,请随时在Ruby LSP的GitHub仓库中记录。

如果您想了解更多关于VS Code的信息,请尝试以下主题: