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