class Rubocop::Cop::Style::BlockNesting
This cop checks for excessive nesting of conditional and looping constructs. Despite the cop’s name, blocks are not considered as a extra level of nesting.
The maximum level of nesting allowed is configurable.
Constants
- NESTING_BLOCKS
Public Instance Methods
inspect(source_buffer, source, tokens, ast, comments)
click to toggle source
# File lib/rubocop/cop/style/block_nesting.rb, line 15 def inspect(source_buffer, source, tokens, ast, comments) return unless ast max = BlockNesting.config['Max'] check_nesting_level(ast, max, 0) end
Private Instance Methods
check_nesting_level(node, max, current_level)
click to toggle source
# File lib/rubocop/cop/style/block_nesting.rb, line 23 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_offence(:convention, node.location.expression, message(max)) 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
message(max)
click to toggle source
# File lib/rubocop/cop/style/block_nesting.rb, line 41 def message(max) "Avoid more than #{max} levels of block nesting." end