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 constructs you want to fold with ‘CountAsOne`.

Available are: ‘array’, ‘hash’, ‘heredoc’, and ‘method_call’. Each construct will be counted as one line regardless of its actual size.

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

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’, ‘hash’, ‘heredoc’, ‘method_call’]

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

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

  msg = <<~HEREDOC  # +1
    Heredoc
    content.
  HEREDOC

  foo(              # +1
    1,
    2
  )
end                 # 4 points

Constants

LABEL

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/metrics/block_length.rb, line 52
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?

  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 81
def cop_label
  LABEL
end
method_receiver_excluded?(node) click to toggle source
# File lib/rubocop/cop/metrics/block_length.rb, line 63
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