class RuboCop::ConfigObsoletion

This class handles obsolete configuration. @api private

Constants

COP_RULE_CLASSES
DEFAULT_RULES_FILE
PARAMETER_RULE_CLASSES

Attributes

files[RW]
rules[R]
warnings[R]

Public Class Methods

legacy_cop_names() click to toggle source
# File lib/rubocop/config_obsoletion.rb, line 24
def legacy_cop_names
  # Used by DepartmentName#qualified_legacy_cop_name
  new(Config.new).rules.select(&:cop_rule?).map(&:old_name)
end
new(config) click to toggle source
# File lib/rubocop/config_obsoletion.rb, line 33
def initialize(config)
  @config = config
  @rules = load_rules
  @warnings = []
end

Public Instance Methods

reject_obsolete!() click to toggle source
# File lib/rubocop/config_obsoletion.rb, line 39
def reject_obsolete!
  messages = obsoletions.flatten.compact
  return if messages.empty?

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

Private Instance Methods

load_cop_rules(rules) click to toggle source

Cop rules are keyed by the name of the original cop

# File lib/rubocop/config_obsoletion.rb, line 69
def load_cop_rules(rules)
  rules.flat_map do |rule_type, data|
    data.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.compact
  end
end
load_parameter_rules(rules) click to toggle source

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.

# File lib/rubocop/config_obsoletion.rb, line 82
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() click to toggle source

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

# File lib/rubocop/config_obsoletion.rb, line 50
def load_rules # rubocop:disable Metrics/AbcSize
  rules = 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() click to toggle source
# File lib/rubocop/config_obsoletion.rb, line 95
def obsoletions
  rules.map do |rule|
    next unless rule.violated?

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

    rule.message
  end
end