Sha256: ded6e12c5717f7dbce5cbb6a65c46ea26e85926bdd3255c4d9626ce15b1ae98d

Contents?: true

Size: 1.34 KB

Versions: 169

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true
# typed: true

module T::Types
  # Validates that an object belongs to the specified class.
  class Simple < Base
    attr_reader :raw_type

    def initialize(raw_type)
      @raw_type = raw_type
    end

    # @override Base
    def name
      # Memoize to mitigate pathological performance with anonymous modules (https://bugs.ruby-lang.org/issues/11119)
      #
      # `name` isn't normally a hot path for types, but it is used in initializing a T::Types::Union,
      # and so in `T.nilable`, and so in runtime constructions like `x = T.let(nil, T.nilable(Integer))`.
      @name ||= @raw_type.name.freeze
    end

    # @override Base
    def valid?(obj)
      obj.is_a?(@raw_type)
    end

    # @override Base
    private def subtype_of_single?(other)
      case other
      when Simple
        @raw_type <= other.raw_type
      else
        false
      end
    end

    def to_nilable
      @nilable ||= T::Types::Union.new([self, T::Utils::Nilable::NIL_TYPE])
    end

    module Private
      module Pool
        def self.type_for_module(mod)
          cached = mod.instance_variable_get(:@__as_sorbet_simple_type)
          return cached if cached

          type = Simple.new(mod)
          mod.instance_variable_set(:@__as_sorbet_simple_type, type) unless mod.frozen?
          type
        end
      end
    end
  end
end

Version data entries

169 entries across 169 versions & 1 rubygems

Version Path
sorbet-runtime-0.5.6403 lib/types/types/simple.rb
sorbet-runtime-0.5.6401 lib/types/types/simple.rb
sorbet-runtime-0.5.6400 lib/types/types/simple.rb
sorbet-runtime-0.5.6398 lib/types/types/simple.rb
sorbet-runtime-0.5.6397 lib/types/types/simple.rb
sorbet-runtime-0.5.6395 lib/types/types/simple.rb
sorbet-runtime-0.5.6393 lib/types/types/simple.rb
sorbet-runtime-0.5.6391 lib/types/types/simple.rb
sorbet-runtime-0.5.6389 lib/types/types/simple.rb
sorbet-runtime-0.5.6388 lib/types/types/simple.rb
sorbet-runtime-0.5.6386 lib/types/types/simple.rb
sorbet-runtime-0.5.6385 lib/types/types/simple.rb
sorbet-runtime-0.5.6382 lib/types/types/simple.rb
sorbet-runtime-0.5.6380 lib/types/types/simple.rb
sorbet-runtime-0.5.6376 lib/types/types/simple.rb
sorbet-runtime-0.5.6374 lib/types/types/simple.rb
sorbet-runtime-0.5.6373 lib/types/types/simple.rb
sorbet-runtime-0.5.6371 lib/types/types/simple.rb
sorbet-runtime-0.5.6370 lib/types/types/simple.rb
sorbet-runtime-0.5.6366 lib/types/types/simple.rb