module T::Types::Union::Private::Pool
def self.union_of_types(type_a, type_b, types=EMPTY_ARRAY)
-
types
(Array
) -- optional array of additional T::Types::Base instances -
type_b
(T::Types::Base
) -- -
type_a
(T::Types::Base
) --
def self.union_of_types(type_a, type_b, types=EMPTY_ARRAY) if types.empty? # We aren't guaranteed to detect a simple `T.nilable(<Module>)` type here # in cases where there are duplicate types, nested unions, etc. # # That's ok, because this is an optimization which isn't necessary for # correctness. if type_b == T::Utils::Nilable::NIL_TYPE && type_a.is_a?(T::Types::Simple) type_a.to_nilable elsif type_a == T::Utils::Nilable::NIL_TYPE && type_b.is_a?(T::Types::Simple) type_b.to_nilable else Union.new([type_a, type_b]) end else # This can't be a `T.nilable(<Module>)` case unless there are duplicates, # which is possible but unexpected. Union.new([type_a, type_b] + types) end end