Merge pull request #13416 from Homebrew/dependabot/bundler/Library/Homebrew/zeitwerk-2.6.0
build(deps): bump zeitwerk from 2.5.4 to 2.6.0 in /Library/Homebrew
This commit is contained in:
commit
5fbfe852a3
@ -197,7 +197,7 @@ GEM
|
||||
yard-sorbet (0.6.1)
|
||||
sorbet-runtime (>= 0.5)
|
||||
yard (>= 0.9)
|
||||
zeitwerk (2.5.4)
|
||||
zeitwerk (2.6.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
@ -47,6 +47,20 @@ class Zeitwerk::GemInflector < ::Zeitwerk::Inflector
|
||||
def camelize(basename, abspath); end
|
||||
end
|
||||
|
||||
class Zeitwerk::GemLoader < ::Zeitwerk::Loader
|
||||
def initialize(root_file, warn_on_extra_files:); end
|
||||
|
||||
def setup; end
|
||||
|
||||
private
|
||||
|
||||
def warn_on_extra_files; end
|
||||
|
||||
class << self
|
||||
def _new(root_file, warn_on_extra_files:); end
|
||||
end
|
||||
end
|
||||
|
||||
class Zeitwerk::Inflector
|
||||
def camelize(basename, _abspath); end
|
||||
def inflect(inflections); end
|
||||
@ -97,9 +111,7 @@ class Zeitwerk::Loader
|
||||
def default_logger; end
|
||||
def default_logger=(_arg0); end
|
||||
def eager_load_all; end
|
||||
def for_gem; end
|
||||
def mutex; end
|
||||
def mutex=(_arg0); end
|
||||
def for_gem(warn_on_extra_files: T.unsafe(nil)); end
|
||||
end
|
||||
end
|
||||
|
||||
@ -165,6 +177,7 @@ module Zeitwerk::Loader::Helpers
|
||||
def cget(parent, cname); end
|
||||
def cpath(parent, cname); end
|
||||
def dir?(path); end
|
||||
def has_at_least_one_ruby_file?(dir); end
|
||||
def hidden?(basename); end
|
||||
def log(message); end
|
||||
def ls(dir); end
|
||||
@ -172,6 +185,7 @@ module Zeitwerk::Loader::Helpers
|
||||
def strict_autoload_path(parent, cname); end
|
||||
end
|
||||
|
||||
Zeitwerk::Loader::MUTEX = T.let(T.unsafe(nil), Thread::Mutex)
|
||||
class Zeitwerk::NameError < ::NameError; end
|
||||
|
||||
module Zeitwerk::RealModName
|
||||
@ -183,12 +197,12 @@ Zeitwerk::RealModName::UNBOUND_METHOD_MODULE_NAME = T.let(T.unsafe(nil), Unbound
|
||||
module Zeitwerk::Registry
|
||||
class << self
|
||||
def autoloads; end
|
||||
def gem_loaders_by_root_file; end
|
||||
def inception?(cpath); end
|
||||
def inceptions; end
|
||||
def loader_for(path); end
|
||||
def loader_for_gem(root_file); end
|
||||
def loader_for_gem(root_file, warn_on_extra_files:); end
|
||||
def loaders; end
|
||||
def loaders_managing_gems; end
|
||||
def on_unload(loader); end
|
||||
def register_autoload(loader, abspath); end
|
||||
def register_inception(cpath, abspath, loader); end
|
||||
@ -198,5 +212,8 @@ module Zeitwerk::Registry
|
||||
end
|
||||
end
|
||||
|
||||
class Zeitwerk::ReloadingDisabledError < ::Zeitwerk::Error; end
|
||||
class Zeitwerk::ReloadingDisabledError < ::Zeitwerk::Error
|
||||
def initialize; end
|
||||
end
|
||||
|
||||
Zeitwerk::VERSION = T.let(T.unsafe(nil), String)
|
@ -7,7 +7,7 @@ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/concurrent-ruby-1.1.1
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/i18n-1.10.0/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/minitest-5.15.0/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/tzinfo-2.0.4/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/zeitwerk-2.5.4/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/zeitwerk-2.6.0/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/activesupport-6.1.6/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/public_suffix-4.0.7/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/addressable-2.8.0/lib"
|
||||
|
@ -3,6 +3,7 @@
|
||||
module Zeitwerk
|
||||
require_relative "zeitwerk/real_mod_name"
|
||||
require_relative "zeitwerk/loader"
|
||||
require_relative "zeitwerk/gem_loader"
|
||||
require_relative "zeitwerk/registry"
|
||||
require_relative "zeitwerk/explicit_namespace"
|
||||
require_relative "zeitwerk/inflector"
|
@ -5,6 +5,9 @@ module Zeitwerk
|
||||
end
|
||||
|
||||
class ReloadingDisabledError < Error
|
||||
def initialize
|
||||
super("can't reload, please call loader.enable_reloading before setup")
|
||||
end
|
||||
end
|
||||
|
||||
class NameError < ::NameError
|
65
Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.6.0/lib/zeitwerk/gem_loader.rb
vendored
Normal file
65
Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.6.0/lib/zeitwerk/gem_loader.rb
vendored
Normal file
@ -0,0 +1,65 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Zeitwerk
|
||||
# @private
|
||||
class GemLoader < Loader
|
||||
# Users should not create instances directly, the public interface is
|
||||
# `Zeitwerk::Loader.for_gem`.
|
||||
private_class_method :new
|
||||
|
||||
# @private
|
||||
# @sig (String, bool) -> Zeitwerk::GemLoader
|
||||
def self._new(root_file, warn_on_extra_files:)
|
||||
new(root_file, warn_on_extra_files: warn_on_extra_files)
|
||||
end
|
||||
|
||||
# @sig (String, bool) -> void
|
||||
def initialize(root_file, warn_on_extra_files:)
|
||||
super()
|
||||
|
||||
@tag = File.basename(root_file, ".rb")
|
||||
@inflector = GemInflector.new(root_file)
|
||||
@root_file = File.expand_path(root_file)
|
||||
@lib = File.dirname(root_file)
|
||||
@warn_on_extra_files = warn_on_extra_files
|
||||
|
||||
push_dir(@lib)
|
||||
end
|
||||
|
||||
# @sig () -> void
|
||||
def setup
|
||||
warn_on_extra_files if @warn_on_extra_files
|
||||
super
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# @sig () -> void
|
||||
def warn_on_extra_files
|
||||
expected_namespace_dir = @root_file.delete_suffix(".rb")
|
||||
|
||||
ls(@lib) do |basename, abspath|
|
||||
next if abspath == @root_file
|
||||
next if abspath == expected_namespace_dir
|
||||
|
||||
basename_without_ext = basename.delete_suffix(".rb")
|
||||
cname = inflector.camelize(basename_without_ext, abspath)
|
||||
ftype = dir?(abspath) ? "directory" : "file"
|
||||
|
||||
warn(<<~EOS)
|
||||
WARNING: Zeitwerk defines the constant #{cname} after the #{ftype}
|
||||
|
||||
#{abspath}
|
||||
|
||||
To prevent that, please configure the loader to ignore it:
|
||||
|
||||
loader.ignore("\#{__dir__}/#{basename}")
|
||||
|
||||
Otherwise, there is a flag to silence this warning:
|
||||
|
||||
Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
|
||||
EOS
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -13,6 +13,9 @@ module Zeitwerk
|
||||
include Helpers
|
||||
include Config
|
||||
|
||||
MUTEX = Mutex.new
|
||||
private_constant :MUTEX
|
||||
|
||||
# Maps absolute paths for which an autoload has been set ---and not
|
||||
# executed--- to their corresponding parent class or module and constant
|
||||
# name.
|
||||
@ -144,15 +147,16 @@ module Zeitwerk
|
||||
end
|
||||
|
||||
to_unload.each do |cpath, (abspath, (parent, cname))|
|
||||
# We have to check cdef? in this condition. Reason is, constants whose
|
||||
# file does not define them have to be kept in to_unload as explained
|
||||
# in the implementation of on_file_autoloaded.
|
||||
#
|
||||
# If the constant is not defined, on_unload should not be triggered
|
||||
# for it.
|
||||
if !on_unload_callbacks.empty? && cdef?(parent, cname)
|
||||
value = parent.const_get(cname)
|
||||
run_on_unload_callbacks(cpath, value, abspath)
|
||||
unless on_unload_callbacks.empty?
|
||||
begin
|
||||
value = cget(parent, cname)
|
||||
rescue ::NameError
|
||||
# Perhaps the user deleted the constant by hand, or perhaps an
|
||||
# autoload failed to define the expected constant but the user
|
||||
# rescued the exception.
|
||||
else
|
||||
run_on_unload_callbacks(cpath, value, abspath)
|
||||
end
|
||||
end
|
||||
|
||||
unload_cref(parent, cname)
|
||||
@ -196,14 +200,12 @@ module Zeitwerk
|
||||
# @raise [Zeitwerk::Error]
|
||||
# @sig () -> void
|
||||
def reload
|
||||
if reloading_enabled?
|
||||
unload
|
||||
recompute_ignored_paths
|
||||
recompute_collapse_dirs
|
||||
setup
|
||||
else
|
||||
raise ReloadingDisabledError, "can't reload, please call loader.enable_reloading before setup"
|
||||
end
|
||||
raise ReloadingDisabledError unless reloading_enabled?
|
||||
|
||||
unload
|
||||
recompute_ignored_paths
|
||||
recompute_collapse_dirs
|
||||
setup
|
||||
end
|
||||
|
||||
# Eager loads all files in the root directories, recursively. Files do not
|
||||
@ -236,7 +238,7 @@ module Zeitwerk
|
||||
if cref = autoloads[abspath]
|
||||
cget(*cref)
|
||||
end
|
||||
elsif dir?(abspath) && !root_dirs.key?(abspath)
|
||||
elsif !root_dirs.key?(abspath)
|
||||
if collapse?(abspath)
|
||||
queue << [namespace, abspath]
|
||||
else
|
||||
@ -289,10 +291,6 @@ module Zeitwerk
|
||||
# @sig #call | #debug | nil
|
||||
attr_accessor :default_logger
|
||||
|
||||
# @private
|
||||
# @sig Mutex
|
||||
attr_accessor :mutex
|
||||
|
||||
# This is a shortcut for
|
||||
#
|
||||
# require "zeitwerk"
|
||||
@ -304,10 +302,13 @@ module Zeitwerk
|
||||
# except that this method returns the same object in subsequent calls from
|
||||
# the same file, in the unlikely case the gem wants to be able to reload.
|
||||
#
|
||||
# @sig () -> Zeitwerk::Loader
|
||||
def for_gem
|
||||
# This method returns a subclass of Zeitwerk::Loader, but the exact type
|
||||
# is private, client code can only rely on the interface.
|
||||
#
|
||||
# @sig (bool) -> Zeitwerk::GemLoader
|
||||
def for_gem(warn_on_extra_files: true)
|
||||
called_from = caller_locations(1, 1).first.path
|
||||
Registry.loader_for_gem(called_from)
|
||||
Registry.loader_for_gem(called_from, warn_on_extra_files: warn_on_extra_files)
|
||||
end
|
||||
|
||||
# Broadcasts `eager_load` to all loaders.
|
||||
@ -326,8 +327,6 @@ module Zeitwerk
|
||||
end
|
||||
end
|
||||
|
||||
self.mutex = Mutex.new
|
||||
|
||||
private # -------------------------------------------------------------------------------------
|
||||
|
||||
# @sig (String, Module) -> void
|
||||
@ -338,7 +337,7 @@ module Zeitwerk
|
||||
basename.delete_suffix!(".rb")
|
||||
cname = inflector.camelize(basename, abspath).to_sym
|
||||
autoload_file(parent, cname, abspath)
|
||||
elsif dir?(abspath)
|
||||
else
|
||||
# In a Rails application, `app/models/concerns` is a subdirectory of
|
||||
# `app/models`, but both of them are root directories.
|
||||
#
|
||||
@ -466,7 +465,7 @@ module Zeitwerk
|
||||
|
||||
# @sig (String) -> void
|
||||
def raise_if_conflicting_directory(dir)
|
||||
self.class.mutex.synchronize do
|
||||
MUTEX.synchronize do
|
||||
Registry.loaders.each do |loader|
|
||||
next if loader == self
|
||||
next if loader.ignores?(dir)
|
@ -131,7 +131,6 @@ module Zeitwerk::Loader::Config
|
||||
|
||||
# Sets a tag for the loader, useful for logging.
|
||||
#
|
||||
# @param tag [#to_s]
|
||||
# @sig (#to_s) -> void
|
||||
def tag=(tag)
|
||||
@tag = tag.to_s
|
@ -15,18 +15,50 @@ module Zeitwerk::Loader::Helpers
|
||||
|
||||
# @sig (String) { (String, String) -> void } -> void
|
||||
def ls(dir)
|
||||
Dir.each_child(dir) do |basename|
|
||||
children = Dir.children(dir)
|
||||
|
||||
# The order in which a directory is listed depends on the file system.
|
||||
#
|
||||
# Since client code may run in different platforms, it seems convenient to
|
||||
# order directory entries. This provides consistent eager loading across
|
||||
# platforms, for example.
|
||||
children.sort!
|
||||
|
||||
children.each do |basename|
|
||||
next if hidden?(basename)
|
||||
|
||||
abspath = File.join(dir, basename)
|
||||
next if ignored_paths.member?(abspath)
|
||||
|
||||
if dir?(abspath)
|
||||
next unless has_at_least_one_ruby_file?(abspath)
|
||||
else
|
||||
next unless ruby?(abspath)
|
||||
end
|
||||
|
||||
# We freeze abspath because that saves allocations when passed later to
|
||||
# File methods. See #125.
|
||||
yield basename, abspath.freeze
|
||||
end
|
||||
end
|
||||
|
||||
# @sig (String) -> bool
|
||||
def has_at_least_one_ruby_file?(dir)
|
||||
to_visit = [dir]
|
||||
|
||||
while dir = to_visit.shift
|
||||
ls(dir) do |_basename, abspath|
|
||||
if dir?(abspath)
|
||||
to_visit << abspath
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
|
||||
# @sig (String) -> bool
|
||||
def ruby?(path)
|
||||
path.end_with?(".rb")
|
||||
@ -37,7 +69,7 @@ module Zeitwerk::Loader::Helpers
|
||||
File.directory?(path)
|
||||
end
|
||||
|
||||
# @sig String -> bool
|
||||
# @sig (String) -> bool
|
||||
def hidden?(basename)
|
||||
basename.start_with?(".")
|
||||
end
|
@ -10,12 +10,11 @@ module Zeitwerk
|
||||
# @sig Array[Zeitwerk::Loader]
|
||||
attr_reader :loaders
|
||||
|
||||
# Registers loaders created with `for_gem` to make the method idempotent
|
||||
# in case of reload.
|
||||
# Registers gem loaders to let `for_gem` be idempotent in case of reload.
|
||||
#
|
||||
# @private
|
||||
# @sig Hash[String, Zeitwerk::Loader]
|
||||
attr_reader :loaders_managing_gems
|
||||
attr_reader :gem_loaders_by_root_file
|
||||
|
||||
# Maps absolute paths to the loaders responsible for them.
|
||||
#
|
||||
@ -77,7 +76,7 @@ module Zeitwerk
|
||||
# @sig (Zeitwerk::Loader) -> void
|
||||
def unregister_loader(loader)
|
||||
loaders.delete(loader)
|
||||
loaders_managing_gems.delete_if { |_, l| l == loader }
|
||||
gem_loaders_by_root_file.delete_if { |_, l| l == loader }
|
||||
autoloads.delete_if { |_, l| l == loader }
|
||||
inceptions.delete_if { |_, (_, l)| l == loader }
|
||||
end
|
||||
@ -87,14 +86,8 @@ module Zeitwerk
|
||||
#
|
||||
# @private
|
||||
# @sig (String) -> Zeitwerk::Loader
|
||||
def loader_for_gem(root_file)
|
||||
loaders_managing_gems[root_file] ||= begin
|
||||
Loader.new.tap do |loader|
|
||||
loader.tag = File.basename(root_file, ".rb")
|
||||
loader.inflector = GemInflector.new(root_file)
|
||||
loader.push_dir(File.dirname(root_file))
|
||||
end
|
||||
end
|
||||
def loader_for_gem(root_file, warn_on_extra_files:)
|
||||
gem_loaders_by_root_file[root_file] ||= GemLoader._new(root_file, warn_on_extra_files: warn_on_extra_files)
|
||||
end
|
||||
|
||||
# @private
|
||||
@ -137,9 +130,9 @@ module Zeitwerk
|
||||
end
|
||||
end
|
||||
|
||||
@loaders = []
|
||||
@loaders_managing_gems = {}
|
||||
@autoloads = {}
|
||||
@inceptions = {}
|
||||
@loaders = []
|
||||
@gem_loaders_by_root_file = {}
|
||||
@autoloads = {}
|
||||
@inceptions = {}
|
||||
end
|
||||
end
|
@ -1,5 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Zeitwerk
|
||||
VERSION = "2.5.4"
|
||||
VERSION = "2.6.0"
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user