Class: RuboCop::Cop::Metrics::BlockNesting

Inherits:
Cop
  • Object
show all
Includes:
ConfigurableMax, IfNode
Defined in:
lib/rubocop/cop/metrics/block_nesting.rb

Overview

This cop checks for excessive nesting of conditional and looping constructs. Despite the cop's name, blocks are not considered as an extra level of nesting.

The maximum level of nesting allowed is configurable.

Constant Summary collapse

NESTING_BLOCKS =
[
  :case, :if, :while, :while_post,
  :until, :until_post, :for, :resbody
]

Constants included from Util

Util::ASGN_NODES, Util::BASIC_LITERALS, Util::EQUALS_ASGN_NODES, Util::LITERALS, Util::OPERATOR_METHODS, Util::PROC_NEW_NODE, Util::SHORTHAND_ASGN_NODES

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

Methods included from IfNode

#elsif?, #if_else?, #if_node_parts, #modifier_if?, #ternary_op?

Methods included from ConfigurableMax

#max=, #parameter_name

Methods inherited from Cop

#add_offense, all, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, cop_type, #correct, #debug?, #details, #display_cop_names?, #display_style_guide?, #excluded_file?, #extra_details?, inherited, #initialize, #join_force?, lint?, match?, non_rails, qualified_cop_name, rails?, #reference_url, #relevant_file?, #style_guide_url

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

begins_its_line?, block_length, command?, comment_line?, const_name, directions, first_part_of_call_chain, lambda?, lambda_or_proc?, line_range, move_pos, numeric_range_size, on_node, operator?, parentheses?, proc?, range_with_surrounding_comma, range_with_surrounding_space, source_range, strip_quotes, within_node?

Methods included from PathUtil

hidden?, issue_deprecation_warning, match_path?, relative_path

Constructor Details

This class inherits a constructor from RuboCop::Cop::Cop

Instance Method Details

#investigate(processed_source) ⇒ Object



20
21
22
23
24
# File 'lib/rubocop/cop/metrics/block_nesting.rb', line 20

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