class RuboCop::Cop::Metrics::BlockNesting
The maximum level of nesting allowed is configurable.
extra level of nesting.
constructs. Despite the cop’s name, blocks are not considered as an
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) current_level += 1 unless elsif?(node) if current_level > max self.max = current_level unless part_of_ignored_node?(node) add_offense(node, :expression, message(max)) do ignore_node(node) end end end end node.each_child_node do |child_node| check_nesting_level(child_node, max, current_level) 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