class RuboCop::ConfigFinder

This class has methods related to finding configuration path. @api private

Constants

DEFAULT_FILE
DOTFILE
RUBOCOP_HOME
XDG_CONFIG

Attributes

project_root[W]

Public Class Methods

find_config_path(target_dir) click to toggle source
# File lib/rubocop/config_finder.rb, line 19
def find_config_path(target_dir)
  find_project_dotfile(target_dir) || find_project_root_dot_config ||
    find_user_dotfile || find_user_xdg_config || DEFAULT_FILE
end
project_root() click to toggle source

Returns the path RuboCop inferred as the root of the project. No file searches will go past this directory.

# File lib/rubocop/config_finder.rb, line 26
def project_root
  @project_root ||= find_project_root
end

Private Class Methods

expand_path(path) click to toggle source
# File lib/rubocop/config_finder.rb, line 69
def expand_path(path)
  File.expand_path(path)
rescue ArgumentError
  # Could happen because HOME or ID could not be determined. Fall back on
  # using the path literally in that case.
  path
end
find_project_dotfile(target_dir) click to toggle source
# File lib/rubocop/config_finder.rb, line 40
def find_project_dotfile(target_dir)
  find_file_upwards(DOTFILE, target_dir, project_root)
end
find_project_root() click to toggle source
# File lib/rubocop/config_finder.rb, line 32
def find_project_root
  pwd = Dir.pwd
  gems_file = find_last_file_upwards('Gemfile', pwd) || find_last_file_upwards('gems.rb', pwd)
  return unless gems_file

  File.dirname(gems_file)
end
find_project_root_dot_config() click to toggle source
# File lib/rubocop/config_finder.rb, line 44
def find_project_root_dot_config
  return unless project_root

  dotfile = File.join(project_root, '.config', DOTFILE)
  return dotfile if File.exist?(dotfile)

  xdg_config = File.join(project_root, '.config', 'rubocop', XDG_CONFIG)
  xdg_config if File.exist?(xdg_config)
end
find_user_dotfile() click to toggle source
# File lib/rubocop/config_finder.rb, line 54
def find_user_dotfile
  return unless ENV.key?('HOME')

  file = File.join(Dir.home, DOTFILE)

  file if File.exist?(file)
end
find_user_xdg_config() click to toggle source
# File lib/rubocop/config_finder.rb, line 62
def find_user_xdg_config
  xdg_config_home = expand_path(ENV.fetch('XDG_CONFIG_HOME', '~/.config'))
  xdg_config = File.join(xdg_config_home, 'rubocop', XDG_CONFIG)

  xdg_config if File.exist?(xdg_config)
end