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

Constants

EMPTY_ARRAY

Public Class Methods

union_of_types(type_a, type_b, types=EMPTY_ARRAY) click to toggle source

@param type_a [T::Types::Base] @param type_b [T::Types::Base] @param types [Array] optional array of additional T::Types::Base instances

# File lib/types/types/union.rb, line 68
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