class RuboCop::CLI::Command::SuggestExtensions

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

def current_formatter

def current_formatter
  @options[:format] || @config_store.for_pwd.for_all_cops['DefaultFormatter'] || 'p'
end

def dependent_gems

def dependent_gems
  lockfile.dependencies.map(&:name)
end

def extensions

def extensions
  return [] unless lockfile.dependencies.any?
  extensions = @config_store.for_pwd.for_all_cops['SuggestExtensions'] || {}
  extensions.select { |_, v| (Array(v) & dependent_gems).any? }.keys - installed_gems
end

def installed_gems

def installed_gems
  lockfile.gems.map(&:name)
end

def lockfile

def lockfile
  @lockfile ||= Lockfile.new
end

def puts(*args)

def puts(*args)
  output = (@options[:stderr] ? $stderr : $stdout)
  output.puts(*args)
end

def run

def run
  return if skip? || extensions.none?
  puts
  puts 'Tip: Based on detected gems, the following '\
       'RuboCop extension libraries might be helpful:'
  extensions.sort.each do |extension|
    puts "  * #{extension} (https://rubygems.org/gems/#{extension})"
  end
  puts
  puts 'You can opt out of this message by adding the following to your config '\
       '(see https://docs.rubocop.org/rubocop/extensions.html#extension-suggestions '\
       'for more options):'
  puts '  AllCops:'
  puts '    SuggestExtensions: false'
  puts if @options[:display_time]
end

def skip?

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['CI'] ||
    @options[:only] || @options[:debug] || @options[:list_target_files] ||
    @options[:out] || @options[:stdin] ||
    !INCLUDED_FORMATTERS.include?(current_formatter)
end