为什么rubocop仅在我的分支更改时失败?

时间:2017-09-17 18:07:53

标签: ruby-on-rails ruby git rubocop

在我们的项目rubocop.yml中,我们检查了班级中的行数:

ClassLength:
    Max: 150 # Default 100

lib/utils/foo.rb中的文件已超过200行。如果我在rubocop分支上运行master检查,那么rubocop运行正常,没有任何错误
现在,在我的feature/cool_feature分支中,我向此lib/utils/foo.rb类添加了5行。现在,如果我在我的分支中运行rubocop,则会失败,并显示以下错误:

Offenses:

lib/utils/foo.rb:1:1: C: Class has too many lines. [151/150]
  1. 为什么这个文件在主分支中已经超过150行的时候没有通过rubocop测试? (注意:rubocop在master分支上运行时没有任何错误)
  2. 当此类有214行时,为什么错误消息显示该类只有 151 行?

1 个答案:

答案 0 :(得分:1)

bbatsov/rubocop/lib/rubocop/cop/metrics/class_length.rb调用check_code_length(node),调用code_length(node)

target_line_numbers = body_line_numbers -
                      line_numbers_of_inner_nodes(node, :module, :class)

target_line_numbers.reduce(0) do |length, line_number|
  source_line = processed_source[line_number]
  next length if irrelevant_line(source_line)

这意味着它只会计算relevant lines(非空,非评论)

因此,检查master中的文件是否实际上有超过150条非空的非注释行。

参见" Rubocop error 'Class definition is too long ruby'"更多。