Parent

Included Modules

Files

Class/Module Index [+]

Quicksearch

RuboCop::Config

This class represents the configuration of the RuboCop application and all its cops. A Config is associated with a YAML configuration file from which it was read. Several different Configs can be used during a run of the rubocop program, if files in several directories are inspected.

Constants

COMMON_PARAMS

Attributes

loaded_path[R]

Public Class Methods

new(hash = {}, loaded_path = nil) click to toggle source
# File lib/rubocop/config.rb, line 20
def initialize(hash = {}, loaded_path = nil)
  @hash = hash
  @loaded_path = loaded_path
  super(@hash)
end

Public Instance Methods

add_excludes_from_higher_level(highest_config) click to toggle source
# File lib/rubocop/config.rb, line 38
def add_excludes_from_higher_level(highest_config)
  return unless highest_config['AllCops'] &&
    highest_config['AllCops']['Exclude']

  self['AllCops'] ||= {}
  excludes = self['AllCops']['Exclude'] ||= []
  highest_config['AllCops']['Exclude'].each do |path|
    unless path.is_a?(Regexp) || path.start_with?('/')
      path = File.join(File.dirname(highest_config.loaded_path), path)
    end
    excludes << path unless excludes.include?(path)
  end
end
add_missing_namespaces() click to toggle source
# File lib/rubocop/config.rb, line 82
def add_missing_namespaces
  keys.each do |k|
    q = Cop::Cop.qualified_cop_name(k, loaded_path)
    next if q == k

    self[q] = self[k]
    delete(k)
  end
end
base_dir_for_path_parameters() click to toggle source

Paths specified in .rubocop.yml files are relative to the directory where that file is. Paths in other config files are relative to the current directory. This is so that paths in config/default.yml, for example, are not relative to RuboCop's config directory since that wouldn't work.

# File lib/rubocop/config.rb, line 151
def base_dir_for_path_parameters
  if File.basename(loaded_path) == ConfigLoader::DOTFILE
    File.expand_path(File.dirname(loaded_path))
  else
    Dir.pwd
  end
end
cop_enabled?(cop) click to toggle source
# File lib/rubocop/config.rb, line 72
def cop_enabled?(cop)
  for_cop(cop).nil? || for_cop(cop)['Enabled']
end
deprecation_check() click to toggle source
# File lib/rubocop/config.rb, line 52
def deprecation_check
  all_cops = self['AllCops']
  return unless all_cops

  %(Exclude Include).each do |key|
    plural = "#{key}s"
    next unless all_cops[plural]

    all_cops[key] = all_cops[plural] # Stay backwards compatible.
    all_cops.delete(plural)
    yield "AllCops/#{plural} was renamed to AllCops/#{key}"
  end
end
file_to_exclude?(file) click to toggle source
# File lib/rubocop/config.rb, line 128
def file_to_exclude?(file)
  file = File.expand_path(file)
  patterns_to_exclude.any? do |pattern|
    match_path?(pattern, file, loaded_path)
  end
end
file_to_include?(file) click to toggle source
# File lib/rubocop/config.rb, line 121
def file_to_include?(file)
  relative_file_path = path_relative_to_config(file)
  patterns_to_include.any? do |pattern|
    match_path?(pattern, relative_file_path, loaded_path)
  end
end
for_cop(cop) click to toggle source
# File lib/rubocop/config.rb, line 66
def for_cop(cop)
  cop = cop.cop_name if cop.respond_to?(:cop_name)
  @for_cop ||= {}
  @for_cop[cop] ||= self[Cop::Cop.qualified_cop_name(cop, loaded_path)]
end
make_excludes_absolute() click to toggle source
# File lib/rubocop/config.rb, line 26
def make_excludes_absolute
  return unless self['AllCops'] && self['AllCops']['Exclude']

  self['AllCops']['Exclude'].map! do |exclude_elem|
    if exclude_elem.is_a?(String) && !exclude_elem.start_with?('/')
      File.join(base_dir_for_path_parameters, exclude_elem)
    else
      exclude_elem
    end
  end
end
path_relative_to_config(path) click to toggle source
# File lib/rubocop/config.rb, line 143
def path_relative_to_config(path)
  relative_path(path, base_dir_for_path_parameters)
end
patterns_to_exclude() click to toggle source
# File lib/rubocop/config.rb, line 139
def patterns_to_exclude
  @hash['AllCops']['Exclude']
end
patterns_to_include() click to toggle source
# File lib/rubocop/config.rb, line 135
def patterns_to_include
  @hash['AllCops']['Include']
end
validate() click to toggle source

TODO: This should be a private method

# File lib/rubocop/config.rb, line 93
def validate
  # Don't validate RuboCop's own files. Avoids inifinite recursion.
  return if @loaded_path.start_with?(File.join(ConfigLoader::RUBOCOP_HOME,
                                               'config'))

  default_config = ConfigLoader.default_configuration

  valid_cop_names, invalid_cop_names = @hash.keys.partition do |key|
    default_config.key?(key)
  end

  invalid_cop_names.each do |name|
    fail ValidationError,
         "unrecognized cop #{name} found in #{loaded_path || self}"
  end

  valid_cop_names.each do |name|
    @hash[name].each_key do |param|
      next if COMMON_PARAMS.include?(param) ||
        default_config[name].key?(param)

      fail ValidationError,
           "unrecognized parameter #{name}:#{param} found "                 "in #{loaded_path || self}"
    end
  end
end
warn_unless_valid() click to toggle source
# File lib/rubocop/config.rb, line 76
def warn_unless_valid
  validate
rescue Config::ValidationError => e
  warn "Warning: #{e.message}".color(:red)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.