Rubocop:是不是可以向 Metrics/AbcSize cop 添加排除项?

Posted

技术标签:

【中文标题】Rubocop:是不是可以向 Metrics/AbcSize cop 添加排除项?【英文标题】:Rubocop: Is it possible to add exclusions to Metrics/AbcSize cop?Rubocop:是否可以向 Metrics/AbcSize cop 添加排除项? 【发布时间】:2020-05-11 04:34:16 【问题描述】:

让我们考虑以下类:

class App
  def call
    # ...
  end

  private

  def foo
    # ...
  end

  def bar
    # ... 
  end
end

Assignment Branch Condition size 大于15 时,是否可以将rubocop 配置为“抱怨”所有方法Metrics/AbcSizecall 方法除外?

对于call 方法,只有当Assignment Branch Condition size 大于30 时它才应该“抱怨”。

提前致谢。

【问题讨论】:

【参考方案1】:

Andy Waite 是正确的,默认情况下它没有被烘焙,但如果你愿意,你可以为这些创建自己的自定义警察。我从来没有亲自做过,但这篇文章似乎解释得很好:

https://medium.com/@DmytroVasin/how-to-add-a-custom-cop-to-rubocop-47abf82f820a

如果我想尝试一下,我会查看 Metrics/ABcSize 的源代码并模仿它的行为,除非它遇到方法名称 #call

源码在这里:https://github.com/rubocop-hq/rubocop/blob/master/lib/rubocop/cop/metrics/abc_size.rb

【讨论】:

【参考方案2】:

RuboCop 不支持此功能。代码的不同部分不能有不同的限制。

【讨论】:

@anothermh 是的,您可以使用指令来禁用规则,但不能设置不同的配置值。【参考方案3】:

这个怎么样:

def a
  ...
end

# rubocop:disable Metrics/AbcSize
def call
   ...
end
# rubocop:enable Metrics/AbcSize

def b
  ...
end

【讨论】:

【参考方案4】:

随着函数对象使用的增加,我看到这个请求越来越多,所以我去实现了一个IgnoredMethods 配置选项,用于三方法复杂的警察:

Metrics/AbcSize Metrics/CyclomaticComplexity Metrics/PerceivedComplexity

pull request 已经合并,因此随着 RuboCop 下一版本(可能是 0.81.0)的发布,您将能够做到这一点:

# rubocop.yml

Metrics/AbcSize:
  IgnoredMethods:
    - 'call'

请注意,这将禁用整个代码库中所有 #call 方法(包括类方法)的 cop。

我知道这与您所寻找的略有不同,但对于大多数意图和目的而言,禁用 cop 与将最大值设置为 30 一样好。;-)

【讨论】:

以上是关于Rubocop:是不是可以向 Metrics/AbcSize cop 添加排除项?的主要内容,如果未能解决你的问题,请参考以下文章

SublimeLinter-Rubocop 即使在启用并且路径中有 rubocop 时也不会运行

Rspec / DescribeClass上的Rubocop错误

Atom-Editor:Rubocop 不适用于 atom

sh Rubocop SH

json Rubocop

json Rubocop