Class: Roodi::Checks::CyclomaticComplexityBlockCheck
- Inherits:
-
CyclomaticComplexityCheck
- Object
- Check
- CyclomaticComplexityCheck
- Roodi::Checks::CyclomaticComplexityBlockCheck
- Defined in:
- lib/roodi/checks/cyclomatic_complexity_block_check.rb
Overview
Checks cyclomatic complexity of a block against a specified limit.
The cyclomatic complexity is measured by the number of “if”, “unless”, “elsif”, “?:”, “while”, “until”, “for”, “rescue”, “case”, “when”, “&&”, “and”, “||” and “or” statements (plus one) in the body of the member. It is a measure of the minimum number of possible paths through the source and therefore the number of required tests.
Generally, for a block, 1-2 is considered good, 3-4 ok, 5-8 consider re-factoring, and 8+ re-factor now!
Constant Summary collapse
- DEFAULT_COMPLEXITY =
4
Constants inherited from CyclomaticComplexityCheck
Roodi::Checks::CyclomaticComplexityCheck::COMPLEXITY_NODE_TYPES
Constants inherited from Check
Roodi::Checks::Check::NODE_TYPES
Instance Method Summary collapse
- #evaluate_end_iter(node) ⇒ Object
- #evaluate_matching_end ⇒ Object
- #evaluate_start_iter(node) ⇒ Object
-
#initialize(options = {}) ⇒ CyclomaticComplexityBlockCheck
constructor
A new instance of CyclomaticComplexityBlockCheck.
- #interesting_nodes ⇒ Object
Methods inherited from Check
#add_error, #end_file, #errors, #evaluate_end, #evaluate_node, #evaluate_node_end, #evaluate_node_start, #evaluate_start, #position, #start_file
Constructor Details
#initialize(options = {}) ⇒ CyclomaticComplexityBlockCheck
Returns a new instance of CyclomaticComplexityBlockCheck.
17 18 19 20 |
# File 'lib/roodi/checks/cyclomatic_complexity_block_check.rb', line 17 def initialize( = {}) complexity = ['complexity'] || DEFAULT_COMPLEXITY super(complexity) end |
Instance Method Details
#evaluate_end_iter(node) ⇒ Object
30 31 32 |
# File 'lib/roodi/checks/cyclomatic_complexity_block_check.rb', line 30 def evaluate_end_iter(node) decrease_depth end |
#evaluate_matching_end ⇒ Object
34 35 36 |
# File 'lib/roodi/checks/cyclomatic_complexity_block_check.rb', line 34 def evaluate_matching_end add_error "Block cyclomatic complexity is #{@count}. It should be #{@complexity} or less." unless @count <= @complexity end |
#evaluate_start_iter(node) ⇒ Object
26 27 28 |
# File 'lib/roodi/checks/cyclomatic_complexity_block_check.rb', line 26 def evaluate_start_iter(node) increase_depth end |
#interesting_nodes ⇒ Object
22 23 24 |
# File 'lib/roodi/checks/cyclomatic_complexity_block_check.rb', line 22 def interesting_nodes [:iter] + COMPLEXITY_NODE_TYPES end |