Remove casts

This commit is contained in:
Douglas Eichelberger 2024-10-14 21:38:59 -07:00
parent ced4a3a91f
commit 70641dcb58
3 changed files with 24 additions and 14 deletions

View File

@ -12,9 +12,7 @@ module Tapioca
ConstantType = type_member { { fixed: Module } }
sig { override.returns(T::Enumerable[Module]) }
def self.gather_constants
ObjectSpace.each_object(Attrable).map { |obj| obj.name.nil? ? obj.attached_object : obj }
end
def self.gather_constants = Homebrew::Tapioca::Utils.named_objects_with_module(Attrable)
sig { override.void }
def decorate

View File

@ -17,22 +17,12 @@ module Tapioca
sig { override.returns(T::Enumerable[Module]) }
def self.gather_constants
objects = T.cast(ObjectSpace.each_object(Forwardable), T::Enumerator[Module])
objects.map { |obj| named_object(obj) }.uniq.reject do |obj|
Homebrew::Tapioca::Utils.named_objects_with_module(Forwardable).reject do |obj|
# Avoid duplicate stubs for forwardables that are defined in vendored gems
Object.const_source_location(T.must(obj.name))&.first&.include?("vendor/bundle/ruby")
end
end
sig { params(obj: Module).returns(Module) }
def self.named_object(obj)
if obj.is_a?(Class) && obj.name.nil?
T.cast(obj.attached_object, Module)
else
obj
end
end
sig { override.void }
def decorate
root.create_path(constant) do |klass|

View File

@ -4,6 +4,17 @@
module Homebrew
module Tapioca
module Utils
sig { params(klass: T::Class[T.anything]).returns(Module) }
def self.named_object_for(klass)
return klass if klass.name
attached_object = klass.attached_object
case attached_object
when Module then attached_object
else raise "Unsupported attached object for: #{klass}"
end
end
# @param class_methods [Boolean] whether to get class methods or instance methods
# @return the `module` methods that are defined in the given file
sig {
@ -18,6 +29,17 @@ module Homebrew
end
methods.select { _1.source_location&.first&.end_with?(file_name) }
end
sig { params(mod: Module).returns(T::Array[Module]) }
def self.named_objects_with_module(mod)
ObjectSpace.each_object(mod).map do |obj|
case obj
when Class then named_object_for(obj)
when Module then obj
else raise "Unsupported object: #{obj}"
end
end.uniq
end
end
end
end