Sha256: 0ee79e94abc819ef596677e23e189b14d2d77538e6f8e61aa2ce5fc0447b4768

Contents?: true

Size: 1.31 KB

Versions: 15

Compression:

Stored size: 1.31 KB

Contents

require 'roodi/checks/cyclomatic_complexity_check'

module Roodi
  module Checks
    # Checks cyclomatic complexity of a method 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 method, 1-4 is considered good, 5-8 ok, 9-10 consider re-factoring, and 
    # 11+ re-factor now!
    class CyclomaticComplexityMethodCheck < CyclomaticComplexityCheck
      
      DEFAULT_COMPLEXITY = 8
      
      def initialize
        super()
        self.complexity = DEFAULT_COMPLEXITY
      end
      
      def interesting_nodes
        [:defn] + COMPLEXITY_NODE_TYPES
      end

      def evaluate_start_defn(node)
        @method_name = @node[1]
        increase_depth
      end

      def evaluate_end_defn(node)
        decrease_depth
      end
      
      def evaluate_matching_end
        add_error "Method name \"#{@method_name}\" cyclomatic complexity is #{@count}.  It should be #{@complexity} or less." unless @count <= @complexity
      end

    end
  end
end

Version data entries

15 entries across 15 versions & 2 rubygems

Version Path
roodi-5.0.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-4.1.1 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-4.1.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-4.0.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-3.3.1 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-3.3.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-3.2.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-3.1.1 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-3.1.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-3.0.1 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-3.0.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb
metric_fu-roodi-2.2.2 lib/roodi/checks/cyclomatic_complexity_method_check.rb
metric_fu-roodi-2.2.1 lib/roodi/checks/cyclomatic_complexity_method_check.rb
roodi-2.2.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb
metric_fu-roodi-2.2.0 lib/roodi/checks/cyclomatic_complexity_method_check.rb