我收到rubocop错误'类定义太长。 [100分之236]”。 我的课程如下所示:
class SomeClassName
include HelperModule
attr_accessor :aaa, :bbb, :ccc
.... methods .....
end
可能出现什么问题? rubocop文档ClassLength表示“类的长度超过某个最大值”。 这是什么意思?
答案 0 :(得分:15)
是的,这是因为rubucop认为整体线路太多了。我同意课程不应该太长,但认为最终应该由以下几个方面决定:课程是否有一个责任,方法是否足够简洁,是否有可以通过模块共享的方法等等...数字/警报虽然是一个很好的警告。如果类中的内容看起来没问题,您可以在类定义的正上方添加# rubocop:disable ClassLength
。
答案 1 :(得分:12)
这可能意味着您的类定义需要超过100行代码。
答案 2 :(得分:6)
(这里有很多好的信息,但是我找到了这个答案,寻找在Rubocop中指定每个类的最大行数的语法,我想其他人也可能会来这里。)
在 .rubocop.yml
中# Allow classes longer than 100 lines of code
ClassLength:
Max: 250 # or whatever ends up being appropriate
答案 3 :(得分:6)
如果我希望我的班级在这里超过100或需要配置最大长度,我是否需要禁用此警察。你会建议什么?
我在这个工作流程中使用了rubocop,假设我遇到一个预先存在的代码库,并带有大量警告:
运行rubocop --auto-gen-config
以创建" TODO"文件。在主rubocop配置文件中包含该文件。有关详细信息,请参阅文档在您的示例中,它将生成一个允许长类的配置(如果您有更大的类,则至少236行或更多)。
现在,如果你运行rubocop
,它将忽略你在TODO文件中放置的所有攻击 - 也就是说,现在一切都会好起来的。只有当你引入更多的错误/警告(比如237行的类)时,它才会重新启动。所以,在这一点上,rubocop
不会为你做任何事情,除非你阻止你做得更糟。
有一段时间,当我有时间杀人时,我从TODO文件中选择一条规则并对其进行处理。有三种可能性:
rubocop
。因此,关于所有这些并没有严格的规则。你应该找到自己的价值观。 rubocop对象的一些东西对我来说完全没问题,因为它们更像是编码风格而不是正确性等等。
如果我希望我的班级在这里超过100或需要配置最大长度,我是否需要禁用此警察。你会建议什么?
我当然确实为我的类文件(以及方法)配置了最大数量的行。代码单元的长度(无论是类还是方法)是一种非常简单但有效的代码气味"这指向成长的代码和重构/分裂的候选者。
我为我挑选了一些数字,我坚持使用它们。即,我不会不断地向上或向下移动它们以适应特定的代码,但如果一段代码增长并且#1; 1行太大",我会采取行动。大多数情况下,我的目标是将其大致分成两半,从长远来看,这将导致所需的最小努力。
如果一个课程很长,它通常会打破每个班级的一个责任"规则。将其分解成部分通常是有益的。不只是随机的子类,而是具有OO合理性,图案化的构造。
如果方法很长,有时可能会指向要采取的OO措施(即引入的类或方法在现有类上拆分;特别是如果方法由大if/else
构造组成或特别是{ {1}}语句,但更多时候它要求简单的老式重构为较小的(可能是私有的)方法。
在rubocop中找到您最喜欢的设置很有趣,它真棒。