class RuboCop::ConfigObsoletion
@api private
This class handles obsolete configuration.
def initialize(config)
def initialize(config) @config = config @rules = load_rules @warnings = [] end
def legacy_cop_names
def legacy_cop_names # Used by DepartmentName#qualified_legacy_cop_name new(Config.new).rules.select(&:cop_rule?).map(&:old_name) end
def load_cop_rules(rules)
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
def load_parameter_rules(rules)
and are given as an array. Each combination is turned into a separate
Parameter rules may apply to multiple cops and multiple parameters
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
def load_rules
Default rules for obsoletions are in config/obsoletion.yml
def load_rules rules = self.class.files.each_with_object({}) do |filename, hash| hash.merge!(YAML.safe_load(File.read(filename))) do |_key, first, second| first.merge(second) 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
def obsoletions
def obsoletions rules.map do |rule| next unless rule.violated? if rule.warning? @warnings.push(rule.message) next end rule.message end end
def reject_obsolete!
def reject_obsolete! messages = obsoletions.flatten.compact return if messages.empty? raise ValidationError, messages.join("\n") end