railties/lib/rails/tasks/zeitwerk.rake
# frozen_string_literal: true
require "rails/zeitwerk_checker"
report_unchecked = ->(unchecked) do
puts
puts <<~EOS
WARNING: The following directories will only be checked if you configure
them to be eager loaded:
EOS
puts
unchecked.each { |dir| puts " #{dir}" }
puts
puts <<~EOS
You may verify them manually, or add them to config.eager_load_paths
in config/application.rb and run zeitwerk:check again.
EOS
puts
end
namespace :zeitwerk do
desc "Check project structure for Zeitwerk compatibility"
task check: :environment do
puts "Hold on, I am eager loading the application."
begin
unchecked = Rails::ZeitwerkChecker.check
rescue Zeitwerk::NameError => e
abort e.message.sub(/#{Regexp.escape(Rails.root.to_s)}./, "")
end
if unchecked.empty?
puts "All is good!"
else
report_unchecked[unchecked]
puts "Otherwise, all is good!"
end
end
end