class RuboCop::ConfigObsoletion
This class handles obsolete configuration. @api private
Constants
- COP_RULE_CLASSES
- DEFAULT_RULES_FILE
- LOAD_RULES_CACHE
- PARAMETER_RULE_CLASSES
Attributes
Public Class Methods
Source
# File lib/rubocop/config_obsoletion.rb, line 45 def deprecated_cop_name?(name) global.deprecated_cop_name?(name) end
Source
# File lib/rubocop/config_obsoletion.rb, line 49 def deprecated_names_for(cop) @deprecated_names ||= {} return @deprecated_names[cop] if @deprecated_names.key?(cop) @deprecated_names[cop] = global.rules.filter_map do |rule| next unless rule.cop_rule? next unless rule.respond_to?(:new_name) next unless rule.new_name == cop rule.old_name end end
Source
# File lib/rubocop/config_obsoletion.rb, line 26 def global @global ||= new(Config.new) end
Source
# File lib/rubocop/config_obsoletion.rb, line 40 def legacy_cop_names # Used by DepartmentName#qualified_legacy_cop_name global.legacy_cop_names end
Source
# File lib/rubocop/config_obsoletion.rb, line 66 def initialize(config) @config = config @rules = load_rules @warnings = [] end
Source
# File lib/rubocop/config_obsoletion.rb, line 30 def reset! @global = nil @deprecated_names = {} LOAD_RULES_CACHE[rules_cache_key] = nil end
Source
# File lib/rubocop/config_obsoletion.rb, line 36 def rules_cache_key files.hash end
Public Instance Methods
Source
# File lib/rubocop/config_obsoletion.rb, line 84 def deprecated_cop_name?(name) legacy_cop_names.include?(name) end
Source
# File lib/rubocop/config_obsoletion.rb, line 79 def legacy_cop_names # Used by DepartmentName#qualified_legacy_cop_name cop_rules.map(&:old_name) end
Source
# File lib/rubocop/config_obsoletion.rb, line 72 def reject_obsolete! messages = obsoletions.flatten.compact return if messages.empty? raise ValidationError, messages.join("\n") end
Private Instance Methods
Source
# File lib/rubocop/config_obsoletion.rb, line 151 def cop_rules rules.select(&:cop_rule?) end
Source
# File lib/rubocop/config_obsoletion.rb, line 112 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
Cop
rules are keyed by the name of the original cop
Source
# File lib/rubocop/config_obsoletion.rb, line 125 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
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.
Source
# File lib/rubocop/config_obsoletion.rb, line 92 def load_rules # rubocop:disable Metrics/AbcSize rules = LOAD_RULES_CACHE[self.class.rules_cache_key] ||= 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
Default rules for obsoletions are in config/obsoletion.yml Additional rules files can be added with ‘RuboCop::ConfigObsoletion.files << filename`
Source
# File lib/rubocop/config_obsoletion.rb, line 138 def obsoletions rules.map do |rule| next unless rule.violated? if rule.warning? @warnings.push(rule.message) next end rule.message end end