class RuboCop::Cop::Metrics::BlockLength

Checks if the length of a block exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable. The cop can be configured to ignore blocks passed to certain methods.

You can set literals you want to fold with ‘CountAsOne`. Available are: ’array’, ‘hash’, and ‘heredoc’. Each literal will be counted as one line regardless of its actual size.

NOTE: The ‘ExcludedMethods` configuration is deprecated and only kept for backwards compatibility. Please use `AllowedMethods` and `AllowedPatterns` instead. By default, there are no methods to allowed.

@example CountAsOne: [‘array’, ‘heredoc’]

something do
  array = [         # +1
    1,
    2
  ]

  hash = {          # +3
    key: 'value'
  }

  msg = <<~HEREDOC  # +1
    Heredoc
    content.
  HEREDOC
end                 # 5 points

NOTE: This cop does not apply for ‘Struct` definitions.

Constants

LABEL

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/metrics/block_length.rb, line 46
def on_block(node)
  return if allowed_method?(node.method_name) || matches_allowed_pattern?(node.method_name)
  return if method_receiver_excluded?(node)
  return if node.class_constructor? || node.struct_constructor?

  check_code_length(node)
end
Also aliased as: on_numblock
on_numblock(node)
Alias for: on_block

Private Instance Methods

cop_label() click to toggle source
# File lib/rubocop/cop/metrics/block_length.rb, line 75
def cop_label
  LABEL
end
method_receiver_excluded?(node) click to toggle source
# File lib/rubocop/cop/metrics/block_length.rb, line 57
def method_receiver_excluded?(node)
  node_receiver = node.receiver&.source&.gsub(/\s+/, '')
  node_method = String(node.method_name)

  allowed_methods.any? do |config|
    next unless config.is_a?(String)

    receiver, method = config.split('.')

    unless method
      method = receiver
      receiver = node_receiver
    end

    method == node_method && receiver == node_receiver
  end
end