Class: RuboCop::Cop::Metrics::CyclomaticComplexity
- Includes:
- RuboCop::Cop::MethodComplexity, Utils::IteratingBlock
- Defined in:
- lib/rubocop/cop/metrics/cyclomatic_complexity.rb
Overview
Checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.
An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn’t add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one. Blocks that are calls to builtin iteration methods (e.g. ‘ary.map…`) also add one, others are ignored.
Direct Known Subclasses
Constant Summary collapse
- MSG =
'Cyclomatic complexity for %<method>s is too high. [%<complexity>d/%<max>d]'
- COUNTED_NODES =
%i[if while until for csend block block_pass rescue when in_pattern and or or_asgn and_asgn].freeze
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Method Summary
Methods included from RuboCop::Cop::MethodComplexity
Methods included from ExcludeLimit
Methods included from Utils::RepeatedCsendDiscount
#discount_for_repeated_csend?, #reset_on_lvasgn, #reset_repeated_csend
Methods inherited from Base
#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base