class Rubocop::Cop::Style::BlockNesting

The maximum level of nesting allowed is configurable.
extra level of nesting.
constructs. Despite the cop’s name, blocks are not considered as a
This cop checks for excessive nesting of conditional and looping

def check_nesting_level(node, max, current_level)

def check_nesting_level(node, max, current_level)
  if NESTING_BLOCKS.include?(node.type)
    unless node.loc.respond_to?(:keyword) &&
        node.loc.keyword.is?('elsif')
      current_level += 1
    end
    if current_level == max + 1
      add_offense(node, :expression, message(max)) do
        self.max = current_level
      end
      return
    end
  end
  node.children.each do |child|
    if child.is_a?(Parser::AST::Node)
      check_nesting_level(child, max, current_level)
    end
  end
end

def investigate(processed_source)

def investigate(processed_source)
  return unless processed_source.ast
  max = cop_config['Max']
  check_nesting_level(processed_source.ast, max, 0)
end

def message(max)

def message(max)
  "Avoid more than #{max} levels of block nesting."
end