【问题标题】:How to tell Rubocop to ignore a specific directory or file如何告诉 Rubocop 忽略特定目录或文件
【发布时间】:2016-08-22 03:10:31
【问题描述】:

我的项目正在从第三方 gem 扩展开源类,我们不想与我们自己的代码保持相同的编码标准。重构 gem 代码不是一个可行的选择。我们只是希望 Rubocop 忽略复制的代码。

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

【问题讨论】:

  • 为什么要将 gem 的源代码复制到项目文件夹中?
  • spickermann,因为我们需要修改类上的一些方法,我们的技术负责人说我们不允许使用猴子补丁。
  • 顺便说一句,为什么 Rubocop 会选择 Gem 的源代码?您是否将 gem 捆绑安装到项目中的子目录中?
  • @orde 评论中引用的手册部分现在位于rubocop.readthedocs.io/en/latest/configuration/…,而不是在 github 主页上。

标签: ruby rubocop


【解决方案1】:

根据 orde 对the manual 链接的评论,我找到了 .rubocop.yml 并添加了以下内容:

AllCops:
  Exclude:
    - 'path/to/excluded/file.rb'

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

【讨论】:

  • 这应该是公认的答案,因为它很短。我刚刚遇到的一个重要说明:这将覆盖默认的 AllCops.Excludes,至少在 Rails 模式下,它将阻止 rubocop 检查node_modulesvendor。因此,您可能还希望将这些添加到您的排除项中。
  • 请注意,您也可以为特定警察执行此操作。例如。 Metrics/BlockLength: \n Exclude: \n - 'Rakefile' \n - '**/*.rake' \n - 'factories/**/*.rb' \n - 'spec/**/*.rb' ? 我希望你能在代码 sn-ps 中为 sub-cmets 做换行符。
【解决方案2】:

来自rubocop/default.yml

AllCops:
  Exclude:
    - 'node_modules/**/*'
    - 'vendor/**/*'

【讨论】:

    【解决方案3】:

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

    见.rubocop.yml here的正式解释。

    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 错误和警告。因此我发表了这篇文章。

    Common Rubocop Errors: Improve Your Ruby Code Quality

    【讨论】:

    • 根据解释链接,是Exclude:而不是Excludes:
    • 我的配置需要在目录或文件名周围加上引号
    • 注意:要忽略目录中的所有子目录和文件,请使用类似 - tmp/**/* 的内容。
    【解决方案4】:

    也可以为单个文件考虑 cmets。非常适合忽略 linter 进行快速而肮脏的临时任务。

    # rubocop:disable all
    
    module TempTask
      ...
    end
    
    # rubocop:enable all
    

    【讨论】:

    • 请记住,这不会跳过文件,它只会抑制警告,但 Rubocop 似乎仍在检查文件。
    【解决方案5】:

    当通过 Visual Studio 使用 Rubocop 时,我无法获得以前的答案。

    我最终注意到 Rubocop 实际上并不是从我的项目文件的根目录执行,而是从我自己的根目录执行,因此使用:

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

    失败是因为db 不在 Rubocop 寻找的同一目录中。

    然后我把它改成了

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

    而且效果很好。请注意,文件名周围没有引号。

    【讨论】:

    • 正确的配置是` - /**/*/schema.rb`,否则会报错
    【解决方案6】:

    我使用的是更新版本,每次添加 Exclude rubocop 都会挂起。原来我需要告诉如何合并Exclude。这可能对你有用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-07
      • 2013-10-13
      • 2018-03-06
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多