Module: T::Types::Union::Private::Pool

Defined in:
lib/types/types/union.rb

Class Method Summary collapse

Class Method Details

.union_of_types(type_a, type_b, types = EMPTY_ARRAY) ⇒ Object

Parameters:



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# 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