#!/usr/bin/env ruby
# frozen_string_literal: true

$LOAD_PATH.unshift(File.join(__dir__, '..', 'lib'))

require 'yard'

require 'rubocop-rspec'
require 'rubocop/rspec/config_formatter'
require 'rubocop/rspec/description_extractor'

glob = File.join('lib', 'rubocop', 'cop', 'rspec',
                 '{,capybara,factory_bot,rails}', '*.rb')
# Due to YARD's sensitivity to file require order (as of 0.9.25),
# we have to prepend the list with our base cop, RuboCop::Cop::RSpec::Base.
# Otherwise, cop's parent class for cops loaded before our base cop class
# are detected as RuboCop::Cop::Base, and that complicates the detection
# of their relation with RuboCop RSpec.
rspec_cop_path = File.join('lib', 'rubocop', 'cop', 'rspec', 'base.rb')
YARD::Tags::Library.define_tag('Cop Safety Information', :safety)
YARD.parse(Dir[glob].prepend(rspec_cop_path), [])

descriptions =
  RuboCop::RSpec::DescriptionExtractor.new(YARD::Registry.all(:class)).to_h
current_config = if Psych::VERSION >= '4.0.0' # RUBY_VERSION >= '3.1.0'
                   YAML.unsafe_load_file('config/default.yml')
                 else
                   YAML.load_file('config/default.yml')
                 end

File.write(
  'config/default.yml',
  RuboCop::RSpec::ConfigFormatter.new(current_config, descriptions).dump
)
