lib/tapioca/runtime/reflection.rb in tapioca-0.11.6 vs lib/tapioca/runtime/reflection.rb in tapioca-0.11.7
- old
+ new
@@ -50,11 +50,11 @@
namespace.const_get(symbol, inherit)
rescue NameError, LoadError, RuntimeError, ArgumentError, TypeError
UNDEFINED_CONSTANT
end
- sig { params(object: BasicObject).returns(Class).checked(:never) }
+ sig { params(object: BasicObject).returns(T::Class[T.anything]).checked(:never) }
def class_of(object)
CLASS_METHOD.bind_call(object)
end
sig { params(constant: Module).returns(T::Array[Symbol]) }
@@ -66,21 +66,21 @@
def name_of(constant)
name = NAME_METHOD.bind_call(constant)
name&.start_with?("#<") ? nil : name
end
- sig { params(constant: Module).returns(Class) }
+ sig { params(constant: Module).returns(T::Class[T.anything]) }
def singleton_class_of(constant)
SINGLETON_CLASS_METHOD.bind_call(constant)
end
sig { params(constant: Module).returns(T::Array[Module]) }
def ancestors_of(constant)
ANCESTORS_METHOD.bind_call(constant)
end
- sig { params(constant: Class).returns(T.nilable(Class)) }
+ sig { params(constant: T::Class[T.anything]).returns(T.nilable(T::Class[T.anything])) }
def superclass_of(constant)
SUPERCLASS_METHOD.bind_call(constant)
end
sig { params(object: BasicObject).returns(Integer).checked(:never) }
@@ -111,11 +111,11 @@
sig { params(constant: Module).returns(T::Array[Module]) }
def inherited_ancestors_of(constant)
if Class === constant
ancestors_of(superclass_of(constant) || Object)
else
- Module.ancestors
+ Module.new.ancestors
end
end
sig { params(constant: Module).returns(T.nilable(String)) }
def qualified_name_of(constant)
@@ -159,11 +159,11 @@
#
# class D < C; end
# descendants_of(C) # => [B, A, D]
sig do
type_parameters(:U)
- .params(klass: T.all(Class, T.type_parameter(:U)))
+ .params(klass: T.all(T::Class[T.anything], T.type_parameter(:U)))
.returns(T::Array[T.type_parameter(:U)])
end
def descendants_of(klass)
result = ObjectSpace.each_object(klass.singleton_class).reject do |k|
T.cast(k, Module).singleton_class? || T.unsafe(k) == klass
@@ -188,9 +188,25 @@
sig { params(constant: Module).returns(T::Set[String]) }
def file_candidates_for(constant)
relevant_methods_for(constant).filter_map do |method|
method.source_location&.first
end.to_set
+ end
+
+ sig { params(constant: Module).returns(T.untyped) }
+ def abstract_type_of(constant)
+ T::Private::Abstract::Data.get(constant, :abstract_type) ||
+ T::Private::Abstract::Data.get(singleton_class_of(constant), :abstract_type)
+ end
+
+ sig { params(constant: Module).returns(T::Boolean) }
+ def final_module?(constant)
+ T::Private::Final.final_module?(constant)
+ end
+
+ sig { params(constant: Module).returns(T::Boolean) }
+ def sealed_module?(constant)
+ T::Private::Sealed.sealed_module?(constant)
end
private
sig { params(constant: Module).returns(T::Array[UnboundMethod]) }