基本用法

RuboCop 有三个主要用途

  1. 代码风格检查器(又称 linter)

  2. ruby -w 的替代品(其 linting 功能的一个子集)

  3. 代码格式化程序

在接下来的部分中,我们将简要介绍所有这些内容。

代码风格检查器

在没有参数的情况下运行 rubocop 将检查当前目录中的所有 Ruby 源文件

$ rubocop

或者,您可以将 rubocop 传递给一个要检查的文件和目录列表

$ rubocop app spec lib/something.rb

以下是 RuboCop 的实际操作。考虑以下 Ruby 源代码

def badName
  if something
    test
    end
end

在它上面运行 RuboCop(假设它在一个名为 test.rb 的文件中)将产生以下报告

Inspecting 1 file
W

Offenses:

test.rb:1:1: C: Style/FrozenStringLiteralComment: Missing magic comment # frozen_string_literal: true.
def badName
^
test.rb:1:5: C: Naming/MethodName: Use snake_case for method names.
def badName
    ^^^^^^^
test.rb:2:3: C: Style/GuardClause: Use a guard clause instead of wrapping the code inside a conditional expression.
  if something
  ^^
test.rb:2:3: C: Style/IfUnlessModifier: Favor modifier if usage when having a single-line body. Another good alternative is the usage of control flow &&/||.
  if something
  ^^
test.rb:4:5: W: Layout/EndAlignment: end at 4, 4 is not aligned with if at 2, 2.
    end
    ^^^

1 file inspected, 5 offenses detected

自动更正违规

您也可以在自动更正模式下运行 RuboCop,它将尝试自动修复它在您的代码中发现的问题

$ rubocop -a
# or
$ rubocop --autocorrect
有关更多详细信息,请参阅 自动更正

更改 RuboCop 认为是违规的内容

RuboCop 为其每个警卫员预先配置了一组规则,这些规则基于 Ruby 风格指南。根据您的项目,您可能希望重新配置警卫员,告诉它忽略某些文件,或者完全禁用它。

更改 RuboCop 行为的最常见方法是在项目的根目录中创建一个名为 .rubocop.yml 的配置文件。

有关更多信息,请参阅 配置

RuboCop 作为 ruby -w 的替代品

RuboCop 本机实现了几乎所有 ruby -w lint 警告检查,以及其他一些。如果您愿意,您可以简单地将 RuboCop 用作 ruby -w 的替代品

$ rubocop -l
# or
$ rubocop --lint

RuboCop 作为格式化程序

有一个方便的快捷方式,可以仅对代码布局(又称格式)违规运行自动更正

$ rubocop -x
# or
$ rubocop --fix-layout
此选项在 RuboCop 0.57.0 中引入。

命令行标志

有关更多详细信息,请查看可用的命令行选项

$ rubocop -h

要为一个标志指定多个 cop,请用逗号分隔 cop,并且不要使用空格

$ rubocop --only Rails/Blank,Layout/HeredocIndentation,Naming/FileName
命令标志 描述

-a/--autocorrect

自动更正违规(仅在安全时)。请参阅 自动更正

--auto-correct

-a/--autocorrect 的弃用别名。

-A/--autocorrect-all

自动更正违规(安全和不安全)。请参阅 自动更正

--auto-correct-all

-A/--autocorrect-all 的弃用别名。

--auto-gen-config

生成一个用作 TODO 列表的配置文件。

--[no-]color

强制打开或关闭彩色输出。

-c/--config

使用指定的配置文件运行。

-C/--cache

存储和重用结果以加快操作速度。

-d/--debug

显示一些额外的调试输出。

--disable-pending-cops

在没有待处理 cop 的情况下运行。

--disable-uncorrectable

与 --autocorrect 一起使用,以使用 rubocop:todo 注释标注任何不支持自动更正的违规。

-D/--[no-]display-cop-names

在违规消息中显示 cop 名称。默认值为 true。

--display-time

以秒为单位显示经过的时间。

--display-only-fail-level-offenses

仅输出指定 --fail-level 或更高级别的违规消息。

--display-only-correctable

仅输出可更正的违规消息。

--display-only-safe-correctable

仅输出安全的可更正的违规消息。

--enable-pending-cops

使用待处理 cop 运行。

--except

运行配置启用的所有 cop,除了指定的 cop 和/或部门。

--exclude-limit

限制 --auto-gen-configExclude 参数中可以列出的单个文件数量,默认值为 15。

-E/--extra-details

在违规消息中显示额外详细信息。

-f/--format

选择一个格式化程序,请参阅 格式化程序

-F/--fail-fast

按修改时间顺序检查文件,并在第一个包含违规的文件后停止。

--fail-level

退出错误代码的最小 严重性。可以给出完整的严重性名称或大写首字母。通常,自动更正的违规会被忽略。如果您希望任何可自动更正的违规触发失败,无论严重性如何,请使用 Aautocorrect

--force-exclusion

即使显式传递为参数,也强制排除配置 Exclude 中指定的文件。

--only-recognized-file-types

仅当命令行中给定的文件在用户配置或默认配置的AllCops/Include参数中列出时,才检查这些文件。

-h/--help

打印使用信息。

--ignore-parent-exclusion

忽略所有父文件夹中所有 .rubocop.yml 文件中的 Exclude: 设置。当您导入子模块时,这很有用,因为您希望在不受父模块的 rubocop 设置影响的情况下测试它们。

--ignore-unrecognized-cops

忽略配置中无法识别的 cop 或部门。

--init

在当前目录中生成 .rubocop.yml 文件。

-l/--lint

仅运行 lint cop。

-L/--list-target-files

列出 RuboCop 将检查的所有文件。

--[no-]auto-gen-only-exclude

在运行 --auto-gen-config 时,仅生成 Exclude 参数,而不是 Max,除非违规文件的数量大于 exclude-limit。默认值为 false。

--[no-]auto-gen-timestamp

在生成的配置文件中包含运行 --auto-gen-config 的日期和时间。默认值为 true。

--[no-]offense-counts

--auto-gen-config 生成的配置文件中显示违规计数。默认值为 true。

--only

仅运行指定的 cop 和/或指定部门中的 cop。

-o/--out

将输出写入文件,而不是 STDOUT。

--[no-]parallel

使用可用的 CPU 并行执行检查。默认值为并行。

--raise-cop-error

引发与 cop 相关的错误,包括原因和位置。这用于防止 cop 静默失败。默认值为 false。

-r/--require

需要 Ruby 文件(参见 加载扩展)。

--regenerate-todo

使用与上次使用 --auto-gen-config 生成 TODO 列表时相同的选项重新生成 TODO 列表(生成选项可以被覆盖)。

--safe

仅运行安全的 cop。

--safe-auto-correct

-a/--autocorrect 的弃用别名。

--show-cops

显示可用的 cop 及其配置。

--show-docs-url

显示提供的 cop 文档页面的 URL。

--stderr

将所有输出写入 stderr,除了自动更正的源代码。这在与 --autocorrect--stdin 结合使用时特别有用。

-s/--stdin

从 STDIN 管道源代码。这对于编辑器集成很有用。接受一个参数,一个路径,相对于项目的根目录。RuboCop 将使用此路径来确定哪些 cop 已启用(例如通过 Include/Exclude),以及某些 cop(如 Naming/FileName)是否可以被检查。

--editor-mode

优化编辑器中的实时反馈,调整编辑体验的行为。直接运行 RuboCop 的编辑器(例如,通过 shell 命令)会遇到与 --lsp 相同的问题。此选项专为这类编辑器而设计。

-S/--display-style-guide

在违规消息中显示样式指南 URL。

-x/--fix-layout

仅自动更正代码布局(格式)违规。

-v/--version

显示当前版本并退出。

-V/--verbose-version

显示当前版本以及解析器和 Ruby 的版本。

默认命令行选项从 .rubocopRUBOCOP_OPTS 加载,并与显式传递给 rubocop 的命令行选项合并。因此,选项具有以下优先级顺序(从最高到最低)

  1. 显式命令行选项

  2. 来自 RUBOCOP_OPTS 环境变量的选项

  3. 来自 .rubocop 文件的选项。

退出代码

RuboCop 使用以下状态代码退出

  • 0 如果未发现违规,或所有违规的严重程度低于 --fail-level。(默认情况下,如果您使用 --autocorrect,则自动更正的违规不会导致 RuboCop 失败。)

  • 1 如果发现一个或多个违规等于或大于 --fail-level。(默认情况下,这是任何未自动更正的违规。)

  • 2 如果 RuboCop 由于配置无效、CLI 选项无效或内部错误而异常终止。