class RuboCop::CLI::Command::SuggestExtensions

Suggest RuboCop extensions to install based on Gemfile dependencies. Only primary dependencies are evaluated, so if a dependency depends on a gem with an extension, it is not suggested. However, if an extension is a transitive dependency, it will not be suggested. @api private

Constants

INCLUDED_FORMATTERS

Combination of short and long formatter names.

Public Instance Methods

run() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 17
def run
  return if skip? || extensions.none?

  print_install_suggestions if not_installed_extensions.any?
  print_load_suggestions if installed_and_not_loaded_extensions.any?

  print_opt_out_instruction

  puts if @options[:display_time]
end

Private Instance Methods

all_extensions() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 73
def all_extensions
  return [] unless lockfile.dependencies.any?

  extensions = @config_store.for_pwd.for_all_cops['SuggestExtensions'] || {}
  extensions.select { |_, v| (Array(v) & dependent_gems).any? }.keys
end
current_formatter() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 69
def current_formatter
  @options[:format] || @config_store.for_pwd.for_all_cops['DefaultFormatter'] || 'p'
end
dependent_gems() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 104
def dependent_gems
  lockfile.dependencies.map(&:name)
end
extensions() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 80
def extensions
  not_installed_extensions + installed_and_not_loaded_extensions
end
installed_and_not_loaded_extensions() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 96
def installed_and_not_loaded_extensions
  installed_extensions - loaded_extensions
end
installed_extensions() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 84
def installed_extensions
  all_extensions & installed_gems
end
installed_gems() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 108
def installed_gems
  lockfile.gems.map(&:name)
end
loaded_extensions() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 92
def loaded_extensions
  @config_store.for_pwd.loaded_features.to_a
end
lockfile() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 100
def lockfile
  @lockfile ||= Lockfile.new
end
not_installed_extensions() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 88
def not_installed_extensions
  all_extensions - installed_gems
end
print_install_suggestions() click to toggle source
print_load_suggestions() click to toggle source
print_opt_out_instruction() click to toggle source
puts(*args) click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 112
def puts(*args)
  output = (@options[:stderr] ? $stderr : $stdout)
  output.puts(*args)
end
skip?() click to toggle source
# File lib/rubocop/cli/command/suggest_extensions.rb, line 30
def skip?
  # Disable outputting the notification:
  # 1. On CI
  # 2. When given RuboCop options that it doesn't make sense for
  # 3. For all formatters except specified in `INCLUDED_FORMATTERS'`
  ENV.fetch('CI', nil) ||
    @options[:only] || @options[:debug] || @options[:list_target_files] ||
    @options[:out] || @options[:stdin] ||
    !INCLUDED_FORMATTERS.include?(current_formatter)
end