# frozen_string_literal: true

begin

require 'rubocop'
require 'rubocop/rake_task'

rescue LoadError # rubocop:disable Lint/HandleExceptions else

require 'rbconfig'
# https://github.com/bundler/bundler/blob/1b3eb2465a/lib/bundler/constants.rb#L2
windows_platforms = /(msdos|mswin|djgpp|mingw)/
if RbConfig::CONFIG['host_os'] =~ windows_platforms
  desc 'No-op rubocop on Windows-- unsupported platform'
  task :rubocop do
    puts 'Skipping rubocop on Windows'
  end
elsif defined?(::Rubinius)
  desc 'No-op rubocop to avoid rbx segfault'
  task :rubocop do
    puts 'Skipping rubocop on rbx due to segfault'
    puts 'https://github.com/rubinius/rubinius/issues/3499'
  end
else
  Rake::Task[:rubocop].clear if Rake::Task.task_defined?(:rubocop)
  patterns = [
    'Gemfile',
    'Rakefile',
    'lib/**/*.{rb,rake}',
    'config/**/*.rb',
    'app/**/*.rb',
    'test/**/*.rb'
  ]
  desc 'Execute rubocop'
  RuboCop::RakeTask.new(:rubocop) do |task|
    task.options = ['--rails', '--display-cop-names', '--display-style-guide']
    task.formatters = ['progress']
    task.patterns = patterns
    task.fail_on_error = true
  end

  namespace :rubocop do
    desc 'Auto-gen rubocop config'
    task :auto_gen_config do
      options = ['--auto-gen-config'].concat patterns
      require 'benchmark'
      result = 0
      cli = RuboCop::CLI.new
      time = Benchmark.realtime do
        result = cli.run(options)
      end
      puts "Finished in #{time} seconds" if cli.options[:debug]
      abort('RuboCop failed!') if result.nonzero?
    end
  end
end

end