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

Rubocop: Is it possible to add exclusions to Metrics/AbcSize cop?

让我们考虑以下class:

class App
  def call
    # ...
  end

  private

  def foo
    # ...
  end

  def bar
    # ... 
  end
end

Assignment Branch Condition size 高于 15 时,是否可以将所有方法的 rubocop 配置为 'complain' 关于 Metrics/AbcSizecall 方法除外?

对于 call 方法,仅当 Assignment Branch Condition size 高于 30 时才应 'complain'。

提前致谢。

RuboCop 不支持这个。您不能对代码的不同部分设置不同的限制。

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

这个怎么样:

def a
  ...
end

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

def b
  ...
end

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

  • Metrics/AbcSize
  • Metrics/CyclomaticComplexity
  • Metrics/PerceivedComplexity

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

# rubocop.yml

Metrics/AbcSize:
  IgnoredMethods:
    - 'call'

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

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