Files
openidea/docs/zh/languages/ruby.mdx
T

72 lines
5.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Ruby"
description: "Ruby LSP 与 Solargraph、基于版本管理器的解释器识别、Rake/RSpec/Minitest 运行、rdbg 调试以及 Rails。"
---
OpenIDEA 无需配置即可高亮 Ruby 文件(`.rb`、`.rake`、`.gemspec`、`.ru`、`.rbi`、`.jbuilder`、`.podspec`,以及 `Gemfile`、`Rakefile`、`Podfile`、`Vagrantfile` 等文件名)和 ERB 模板。代码智能由 Ruby LSP 提供。Rake 任务、RSpec、Minitest 和 `rails server` 会被识别为运行配置,调试使用 Ruby `debug` gem 中的 `rdbg`。其他语言见[支持矩阵](/zh/languages/index)。
## 语言服务器
| 服务器 | 启用条件 |
| --------------------- | ---------------------------------------------------------------------------- |
| `ruby-lsp`(Shopify) | 默认。工作区根:`Gemfile`、`.ruby-version` 或 `.rubocop.yml`。 |
| `solargraph` | 备选:仅在未安装 Ruby LSP 时使用。工作区根:`Gemfile` 或 `.solargraph.yml`。 |
ERB 文件(`.erb`、`.html.erb` 等)只有语法高亮,没有语言服务器。
## 环境配置
### Ruby 解释器
**设置 › 语言和框架 › Ruby 语言 › Ruby 解释器** 用于选择运行 `ruby`、`rake`、`rspec` 配置的 Ruby;它的标准库和 Bundler 解析出的 gem 会显示在项目树的 **外部库** 中。
**自动**(默认)会先找与 `.ruby-version`(从项目目录向上查找)匹配的安装,其次是 mise 或 asdf 固定的版本,最后用 `PATH` 上的 `ruby`。列表会列出 rbenv、rvm、chruby(`~/.rubies`、`/opt/rubies`)、mise、asdf 安装的 Ruby,Homebrew 的 Ruby,以及 `PATH` 上的 Ruby(版本管理器的 shim 除外)。
### 安装语言服务器
打开 Ruby 文件而没有任何服务器时,IDE 会弹出通知并提供 **安装** 按钮。所有工具也都列在 **设置 › 语言和框架 › 语言服务器** 中。
| 工具 | 安装方式 |
| ---------------- | --------------------------------------------------------------------------------------------------------------------- |
| Ruby LSP | 用 `gem install ruby-lsp` 装进项目所用的 Ruby(它会在 Bundler 下重新启动自身,放在路径含空格的私有 gem 目录里会出错) |
| Solargraph | 用 `gem install` 装进 IDE 自己的工具目录 |
| `rdbg`(调试器) | IDE 不负责安装:执行 `gem install debug`,或把 `debug` 加进 Gemfile |
两种安装都需要 `PATH` 上有 `gem`。即使 Ruby 的 gem `bin` 目录不在 `PATH` 上(例如 Homebrew 的 Ruby),IDE 也能找到 gem 的可执行文件。
## 运行与测试
项目根目录有 `Gemfile`、`Rakefile`、`.ruby-version`、`config.ru` 或 `.gemspec` 时,会自动检测:
- 存在 `bin/rails` 时生成 **rails server**。
- `Rakefile` 中定义的每个任务一个 **Rake 任务** 配置,包括 `namespace` 块以及 `Rake::TestTask` / `RSpec::Core::RakeTask` 定义的任务。`test`、`spec`、`*:test`、`*:spec` 是测试配置。
- 项目有 `spec/`、`.rspec` 或 Gemfile 中引用了 `rspec` 时生成 **RSpec 测试**。
- 否则,如果有 `test/` 目录且没有 `test` Rake 任务,生成一个 **minitest** 配置,加载 `test/` 下所有 `*_test.rb` / `test_*.rb`。
有 `Gemfile` 时,这些配置通过 `bundle exec` 运行。**Ruby 语言**、**Rake 任务**、**RSpec 测试** 三种运行配置类型都有 **通过 Bundler 运行(bundle exec)** 选项,以及可填 binstub 等命令的 **启动器** 字段。
**运行上下文配置**(`⌃⇧R` / `Ctrl+Shift+F10`):
- `*_spec.rb` 文件通过 RSpec 运行,并以该文件为目标。
- `*_test.rb` / `test_*.rb` 文件通过 `rake test`(以 `TEST=<file>` 传入)或 minitest 配置运行。
- 其他 `.rb` 文件用 `ruby` 运行,并把项目的源代码目录加入加载路径(`-I`)。
在 Minitest 和 Test::Unit 文件中,边栏图标可以单独运行某个测试类、模块或测试方法(`--name=Class#test_x`)。IDE 会在运行时加载一个报告器(不改动项目文件),把 Minitest 结果写入测试树,并带上每个测试真实的文件和行号。支持 **重新运行失败的测试**。详见[测试](/zh/guide/testing)。
**使用覆盖率运行** 通过 SimpleCov 支持 `ruby`、`bundle`、`rake`、`rspec`、`rails` 运行;使用 Bundler 的项目需要在 Gemfile 中加入 `simplecov`。详见[覆盖率](/zh/guide/coverage)。
## 调试
**调试** 适用于 Ruby 文件以及检测出的 Rake、RSpec、minitest 和 `rails server` 配置。IDE 会从项目所用的 Ruby 启动 `rdbg`(`bundle` 也取自同一安装),因此请先为该 Ruby 安装 `debug` gem。详见[调试](/zh/guide/debugging)。
## 框架支持
- **Rails**:提供 `rails server` 运行配置,项目的 gem(包括 Rails)显示在外部库中,ERB 有语法高亮,Rails 运行支持覆盖率。除 Ruby LSP 本身提供的能力外,没有 Rails 专属的导航(路由、控制器到视图等)。
## 已知限制
- RSpec 只能按文件或整个套件运行,单个 `describe` / `it` 没有边栏运行图标。
- 不支持附加或远程调试 Ruby 进程。
- ERB 模板没有代码智能。
- IDE 不会安装 `debug` gem。