Sha256: c647a133dffaaf29f9c1ba2880b6cc54c7c729a4669209b7cf390d05750ed0ca
Contents?: true
Size: 1.49 KB
Versions: 32
Compression:
Stored size: 1.49 KB
Contents
# frozen_string_literal: true module RuboCop module Cop # Common functionality for checking length of code segments. module CodeLength include ConfigurableMax MSG = '%<label>s has too many lines. [%<length>d/%<max>d]' 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.loc.expression add_offense(location, message: message(length, max_length)) do self.max = length end 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
32 entries across 32 versions & 3 rubygems