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/AbcSize
,call
方法除外?
对于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 时也不会运行