module T::Types::Union::Private::Pool

def self.union_of_types(type_a, type_b, types=EMPTY_ARRAY)

Parameters:
  • 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