如何告诉Rubocop忽略特定的目录或文件

118

我的项目扩展了来自第三方 gem 的开源类,我们不想将其与我们自己的代码保持相同的编码标准。重构 gem 代码并不可行。我们只希望 Rubocop 忽略复制的代码。

如何指示 Rubocop 完全忽略文件或目录?


1
请尝试使用 https://github.com/bbatsov/rubocop#includingexcluding-files。 - orde
1
你为什么要将 gem 的源代码复制到你的项目文件夹里? - spickermann
1
spickermann,因为我们需要修改类上的一些方法,而我们的技术领导说我们不允许使用猴子补丁来完成。 - emery
2
@orde评论中提到的手册部分现在已经移至http://rubocop.readthedocs.io/en/latest/configuration/#includingexcluding-files,而不是Github主页面上。 - David Moles
@emery 为什么不使用 Ruby 的 Refinements?参考这篇文章:http://yehudakatz.com/2010/11/30/ruby-2-0-refinements-in-practice/ - Yo Ludke
显示剩余3条评论
6个回答

147
根据orde的评论和链接到手册,我找到了.rubocop.yml文件并添加了以下内容。
AllCops:
  Exclude:
    - 'path/to/excluded/file.rb'

路径是相对于 .rubocop.yml 的位置


5
这应该成为被采纳的答案,因为它很简短。不过我刚刚遇到一个重要的提示:这会覆盖默认的AllCops.Excludes设置,在Rails模式下至少会防止rubocop检查node_modulesvendor目录。所以你可能也需要将它们添加到你的排除列表中。 - Ramfjord
3
请注意,您也可以针对特定的警察执行此操作。例如:Metrics/BlockLength: \n Exclude: \n - 'Rakefile' \n - '**/*.rake' \n - 'factories/**/*.rb' \n - 'spec/**/*.rb' 我希望您能在代码片段中进行子注释的换行。 - stwr667
请确保您也保留默认值(请参见 https://github.com/rubocop/rubocop/blob/924b939202eddeee2516aec958a2487356f3e53c/config/default.yml#L63-L67) - Spone

58

35

还可以考虑为单个文件添加注释。非常适用于在快速而肮脏的临时任务中忽略代码检查器。

# rubocop:disable all

module TempTask
  ...
end

# rubocop:enable all

记住,这不会跳过文件,它只能抑制警告,但是Rubocop似乎仍然会检查该文件。 - Sergio

23

为方便起见,这是我经常使用的 .rubocop.yml。

有关 .rubocop.yml 的正式解释,请参见此处

AllCops:
  Exclude:
    - Berksfile
    - recipes/basic.rb
    - attributes/*.rb

# Customize rules
Metrics/LineLength:
  Max: 95

MethodLength:
  Max: 35

Metrics/AbcSize:
   Enabled: false

BlockLength:
  Max: 70

我经常遇到rubocop的错误和警告。因此,我发布了这篇文章。

常见的Rubocop错误:提高你的Ruby代码质量


2
根据解释链接,应该是“Exclude:”而不是“Excludes:”。 - Beni Cherniavsky-Paskin
我的配置需要在目录或文件名周围加上引号。 - Natus Drew
注意:要忽略目录中的所有子目录和文件,请使用类似于 - tmp/**/* 的内容。 - Joshua Pinter

4

我正在使用更新的版本,每次添加Exclude时,rubocop都会卡住。原来我需要告诉它如何合并Exclude。这可能对你有用。

require:
  - rubocop-rails
inherit_mode:
  merge:
    - Exclude
AllCops:
  Exclude:
    - 'node_modules/**/*'
    - 'vendor/**/*'
  NewCops: disable

3

当我在Visual Studio中使用Rubocop时,之前的解决方法都无法正常工作。

最终我发现Rubocop实际上并不是从我的项目文件根目录执行,而是从我的个人根目录执行,所以需要使用以下命令:

# Doesn't work :(
AllCops:
  Exclude:
    - db/schema.rb

该程序执行失败,是因为 Rubocop 无法在同一目录下找到 db 文件。

我随后将其更改为:

# Works :)
AllCops:
  Exclude:
    - */schema.rb

它可以正常工作。请注意,文件名周围没有引号。


1
正确的配置应该是 - /**/*/schema.rb,否则会报错。 - Patrick Barattin
实际上 /**/schema.rb 就足够了,不需要 /**/*/ - devius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接