Sha256: 7110ee9b0a7738d9757c0a4991fb2c7b88c8dfb3a7b312835b262064425fff59

Contents?: true

Size: 1.65 KB

Versions: 278

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    # Handles the `MinSize` configuration option for array-based cops
    # `Style/SymbolArray` and `Style/WordArray`, which check for use of the
    # relevant percent literal syntax such as `%i[...]` and `%w[...]`
    module ArrayMinSize
      private

      def below_array_length?(node)
        node.values.length < min_size_config
      end

      def min_size_config
        cop_config['MinSize']
      end

      def array_style_detected(style, ary_size) # rubocop:todo Metrics/AbcSize
        cfg = config_to_allow_offenses
        return if cfg['Enabled'] == false

        largest_brackets = largest_brackets_size(style, ary_size)
        smallest_percent = smallest_percent_size(style, ary_size)

        if cfg['EnforcedStyle'] == style.to_s
          # do nothing
        elsif cfg['EnforcedStyle'].nil?
          cfg['EnforcedStyle'] = style.to_s
        elsif smallest_percent <= largest_brackets
          self.config_to_allow_offenses = { 'Enabled' => false }
        else
          cfg['EnforcedStyle'] = 'percent'
          cfg['MinSize'] = largest_brackets + 1
        end
      end

      def largest_brackets_size(style, ary_size)
        self.class.largest_brackets ||= -Float::INFINITY

        if style == :brackets && ary_size > self.class.largest_brackets
          self.class.largest_brackets = ary_size
        end

        self.class.largest_brackets
      end

      def smallest_percent_size(style, ary_size)
        @smallest_percent ||= Float::INFINITY

        @smallest_percent = ary_size if style == :percent && ary_size < @smallest_percent

        @smallest_percent
      end
    end
  end
end

Version data entries

278 entries across 269 versions & 26 rubygems

Version Path
rubocop-1.74.0 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.73.2 lib/rubocop/cop/mixin/array_min_size.rb
siteimprove_api_client-1.0.1 vendor/bundle/ruby/3.2.0/gems/rubocop-1.73.1/lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.73.1 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.73.0 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.72.2 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.72.1 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.72.0 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.71.2 lib/rubocop/cop/mixin/array_min_size.rb
tailscale_middleware-0.0.3 vendor/cache/ruby/3.4.0/gems/rubocop-1.71.1/lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.71.1 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.71.0 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.70.0 lib/rubocop/cop/mixin/array_min_size.rb
minato_ruby_api_client-0.2.2 vendor/bundle/ruby/3.2.0/gems/rubocop-1.64.1/lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.69.2 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.69.1 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.69.0 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.68.0 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.67.0 lib/rubocop/cop/mixin/array_min_size.rb
rubocop-1.66.1 lib/rubocop/cop/mixin/array_min_size.rb