123456789_123456789_123456789_123456789_123456789_

Class: RuboCop::ConfigObsoletion Private

Overview

This class handles obsolete configuration.

Constant Summary

Class Attribute Summary

  • .files rw Internal use only Internal use only

Class Method Summary

Instance Attribute Summary

  • #rules readonly Internal use only Internal use only
  • #warnings readonly Internal use only Internal use only

Instance Method Summary

  • #reject_obsolete! Internal use only Internal use only
  • #load_cop_rules(rules) private Internal use only Internal use only

    Cop rules are keyed by the name of the original cop.

  • #load_parameter_rules(rules) private Internal use only Internal use only

    Parameter rules may apply to multiple cops and multiple parameters and are given as an array.

  • #load_rules private Internal use only Internal use only

    Default rules for obsoletions are in config/obsoletion.yml Additional rules files can be added with RuboCop::ConfigObsoletion.files << filename.

  • #obsoletions private Internal use only Internal use only

Class Attribute Details

.files (rw)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 24

attr_accessor :files

Class Method Details

.legacy_cop_names

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 26

def legacy_cop_names
  # Used by DepartmentName#qualified_legacy_cop_name
  new(Config.new).rules.select(&:cop_rule?).map(&:old_name)
end

Instance Attribute Details

#rules (readonly)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 21

attr_reader :rules, :warnings

#warnings (readonly)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 21

attr_reader :rules, :warnings

Instance Method Details

#load_cop_rules(rules) (private)

This method is for internal use only.

Cop rules are keyed by the name of the original cop

[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 72

def load_cop_rules(rules)
  rules.flat_map do |rule_type, data|
    data.filter_map do |cop_name, configuration|
      next unless configuration # allow configurations to be disabled with `CopName: ~`

      COP_RULE_CLASSES[rule_type].new(@config, cop_name, configuration)
    end
  end
end

#load_parameter_rules(rules) (private)

This method is for internal use only.

Parameter rules may apply to multiple cops and multiple parameters and are given as an array. Each combination is turned into a separate rule object.

[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 85

def load_parameter_rules(rules)
  rules.flat_map do |rule_type, data|
    data.flat_map do |configuration|
      cops = Array(configuration['cops'])
      parameters = Array(configuration['parameters'])

      cops.product(parameters).map do |cop, parameter|
        PARAMETER_RULE_CLASSES[rule_type].new(@config, cop, parameter, configuration)
      end
    end
  end
end

#load_rules (private)

This method is for internal use only.

Default rules for obsoletions are in config/obsoletion.yml Additional rules files can be added with RuboCop::ConfigObsoletion.files << filename

[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 52

def load_rules # rubocop:disable Metrics/AbcSize
  rules = LOAD_RULES_CACHE[self.class.files] ||=
    self.class.files.each_with_object({}) do |filename, hash|
      hash.merge!(YAML.safe_load(File.read(filename)) || {}) do |_key, first, second|
        case first
        when Hash
          first.merge(second)
        when Array
          first.concat(second)
        end
      end
    end

  cop_rules = rules.slice(*COP_RULE_CLASSES.keys)
  parameter_rules = rules.slice(*PARAMETER_RULE_CLASSES.keys)

  load_cop_rules(cop_rules).concat(load_parameter_rules(parameter_rules))
end

#obsoletions (private)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 98

def obsoletions
  rules.map do |rule|
    next unless rule.violated?

    if rule.warning?
      @warnings.push(rule.message)
      next
    end

    rule.message
  end
end

#reject_obsolete!

This method is for internal use only.

Raises:

[ GitHub ]

  
# File 'lib/rubocop/config_obsoletion.rb', line 41

def reject_obsolete!
  messages = obsoletions.flatten.compact
  return if messages.empty?

  raise ValidationError, messages.join("\n")
end