Class: RuboCop::Cop::Metrics::AbcSize

Inherits:
Base
  • Object
show all
Includes:
RuboCop::Cop::MethodComplexity
Defined in:
lib/rubocop/cop/metrics/abc_size.rb

Overview

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See c2.com/cgi/wiki?AbcMetric and en.wikipedia.org/wiki/ABC_Software_Metric.

You can have repeated “attributes” calls count as a single “branch”. For this purpose, attributes are any method with no argument; no attempt is meant to distinguish actual `attr_reader` from other methods.

This cop also takes into account `IgnoredMethods` (defaults to `[]`)

Examples:

CountRepeatedAttributes: false (default is true)


# `model` and `current_user`, refenced 3 times each,
# are each counted as only 1 branch each if
# `CountRepeatedAttributes` is set to 'false'

def search
  @posts = model.active.visible_by(current_user)
            .search(params[:q])
  @posts = model.some_process(@posts, current_user)
  @posts = model.another_process(@posts, current_user)

  render 'pages/search/page'
end

Constant Summary collapse

MSG =
'Assignment Branch Condition size for %<method>s is too high. ' \
'[%<abc_vector>s %<complexity>.4g/%<max>.4g]'

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Method Summary

Methods included from RuboCop::Cop::MethodComplexity

included, #on_block, #on_def

Methods included from ExcludeLimit

#exclude_limit

Methods included from Utils::RepeatedCsendDiscount

#discount_for_repeated_csend?, #reset_on_lvasgn, #reset_repeated_csend

Methods included from IgnoredMethods

#ignored_method?, #ignored_methods, included

Methods inherited from Base

#add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

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