Sha256: 9868baad3ea0ab1e1ca90a02df2abe423056e92a528b053bdf43c391b75f5a45

Contents?: true

Size: 1.5 KB

Versions: 136

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    # Common functionality for checking length of code segments.
    module CodeLength
      extend ExcludeLimit

      MSG = '%<label>s has too many lines. [%<length>d/%<max>d]'

      exclude_limit 'Max'

      private

      def message(length, max_length)
        format(MSG, label: cop_label, length: length, max: max_length)
      end

      def max_length
        cop_config['Max']
      end

      def count_comments?
        cop_config['CountComments']
      end

      def count_as_one
        Array(cop_config['CountAsOne']).map(&:to_sym)
      end

      def check_code_length(node)
        # Skip costly calculation when definitely not needed
        return if node.line_count <= max_length

        calculator = build_code_length_calculator(node)
        length = calculator.calculate
        return if length <= max_length

        location = node.casgn_type? ? node.loc.name : node.source_range

        add_offense(location, message: message(length, max_length)) { self.max = length }
      end

      # Returns true for lines that shall not be included in the count.
      def irrelevant_line(source_line)
        source_line.blank? || (!count_comments? && comment_line?(source_line))
      end

      def build_code_length_calculator(node)
        Metrics::Utils::CodeLengthCalculator.new(
          node,
          processed_source,
          count_comments: count_comments?,
          foldable_types: count_as_one
        )
      end
    end
  end
end

Version data entries

136 entries across 135 versions & 13 rubygems

Version Path
harbr-2.8.1 vendor/bundle/ruby/3.2.0/gems/rubocop-1.57.2/lib/rubocop/cop/mixin/code_length.rb
bison-0.1.0 vendor/bundle/ruby/3.2.0/gems/rubocop-1.62.1/lib/rubocop/cop/mixin/code_length.rb
rubocop-1.62.1 lib/rubocop/cop/mixin/code_length.rb
rubocop-1.62.0 lib/rubocop/cop/mixin/code_length.rb
rubocop-1.61.0 lib/rubocop/cop/mixin/code_length.rb
mlh-rubocop-config-1.0.3 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.2/lib/rubocop/cop/mixin/code_length.rb
rubocop-1.60.2 lib/rubocop/cop/mixin/code_length.rb
study_line-0.2.7 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.0/lib/rubocop/cop/mixin/code_length.rb
study_line-0.2.6 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.0/lib/rubocop/cop/mixin/code_length.rb
study_line-0.2.5 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.0/lib/rubocop/cop/mixin/code_length.rb
study_line-0.2.4 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.0/lib/rubocop/cop/mixin/code_length.rb
study_line-0.2.3 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.0/lib/rubocop/cop/mixin/code_length.rb
study_line-0.2.2 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.0/lib/rubocop/cop/mixin/code_length.rb
rubocop-1.60.1 lib/rubocop/cop/mixin/code_length.rb
study_line-0.2.1 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.0/lib/rubocop/cop/mixin/code_length.rb
study_line-0.2.0 vendor/bundle/ruby/3.2.0/gems/rubocop-1.60.0/lib/rubocop/cop/mixin/code_length.rb
rubocop-1.60.0 lib/rubocop/cop/mixin/code_length.rb
harbr-0.2.10 vendor/bundle/ruby/3.2.0/gems/rubocop-1.57.2/lib/rubocop/cop/mixin/code_length.rb
harbr-0.2.9 vendor/bundle/ruby/3.2.0/gems/rubocop-1.57.2/lib/rubocop/cop/mixin/code_length.rb
harbr-0.2.8 vendor/bundle/ruby/3.2.0/gems/rubocop-1.57.2/lib/rubocop/cop/mixin/code_length.rb