Rubocop:是否可以告诉 Rubocop 在仅发现警告时返回零作为退出代码?

Mar*_*n13 3 ruby continuous-integration travis-ci rubocop

0当只发现警告时,是否可以告诉 Rubocop作为退出代码返回?


先决条件

  1. 我正在使用以下命令在 Travis CI 上运行 Rubocop:

    bundle exec rubocop
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我有一个配置为警告的警察rubocop.yml

    Style/Documentation:
      Severity: warning
    
    Run Code Online (Sandbox Code Playgroud)

问题

Travis CI 仅当其退出代码等于 时才将命令视为成功的命令0

当 Rubocop0没有发现任何违规行为时,它会作为退出代码返回,

但当它发现至少一项罪行时,

1无论此攻击是错误还是警告,它都会作为退出代码返回。

因此,当 Rubocop 仅发现警告时,Travis CI 构建失败。

因此,是否可以0在仅发现警告时告诉 Rubocop作为退出代码返回?

提前致谢。


笔记

  • 请不要建议禁用警察。

  • 我正在使用以下方法检查退出代码:

    $ bundle exec rubocop
    // ...
    14 files inspected, 8 offenses detected
    
    $ echo "$?"
    1
    
    Run Code Online (Sandbox Code Playgroud)

ano*_*rmh 6

使用--fail-level具有适当severity级别的标志:

rubocop --fail-level error
Run Code Online (Sandbox Code Playgroud)

您可以在Rubocop Docs 中阅读有关命令行标志的更多信息severity,以及Rubocop Docs 中通用配置参数的级别。

鉴于foo.rb

# foo.rb
class Foo; end
Run Code Online (Sandbox Code Playgroud)

并且.rubocop.yml

Style/FrozenStringLiteralComment:
  Severity: warning
Run Code Online (Sandbox Code Playgroud)

使用适当的标志运行 Rubocop:

rubocop --fail-level error
Run Code Online (Sandbox Code Playgroud)

并得到以下输出:

Inspecting 1 file
W

Offenses:

foo.rb:1:1: W: Style/FrozenStringLiteralComment: Missing frozen string literal comment.
class Foo
^
Run Code Online (Sandbox Code Playgroud)

然后获取退出代码:

echo $?
0
Run Code Online (Sandbox Code Playgroud)

通过修改您.rubocop.yml使用error而不是验证它是否按预期工作warning

Style/FrozenStringLiteralComment:
  Severity: error
Run Code Online (Sandbox Code Playgroud)

再次运行并得到输出:

rubocop --fail-level error
Inspecting 1 file
E

Offenses:

foo.rb:1:1: E: Style/FrozenStringLiteralComment: Missing frozen string literal comment.
class Foo
^

1 file inspected, 1 offense detected
Run Code Online (Sandbox Code Playgroud)

并获取退出代码:

echo $?
1
Run Code Online (Sandbox Code Playgroud)