Sha256: b4dae410971657c93896ff6326f2086b1bdd9218a1eddaf72fbb4758c7822460

Contents?: true

Size: 1.53 KB

Versions: 147

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true
# typed: true

module T::Types
  class TypedClass < T::Types::Base
    attr_reader :type

    def initialize(type)
      @type = T::Utils.coerce(type)
    end

    # overrides Base
    def name
      "T::Class[#{@type.name}]"
    end

    def underlying_class
      Class
    end

    # overrides Base
    def valid?(obj)
      Class.===(obj)
    end

    # overrides Base
    private def subtype_of_single?(type)
      case type
      when TypedClass
        # treat like generics are erased
        true
      when Simple
        Class <= type.raw_type
      else
        false
      end
    end

    module Private
      module Pool
        CACHE_FROZEN_OBJECTS =
          begin
            ObjectSpace::WeakMap.new[1] = 1
            true # Ruby 2.7 and newer
          rescue ArgumentError
            false # Ruby 2.6 and older
          end

        @cache = ObjectSpace::WeakMap.new

        def self.type_for_module(mod)
          cached = @cache[mod]
          return cached if cached

          type = TypedClass.new(mod)

          if CACHE_FROZEN_OBJECTS || (!mod.frozen? && !type.frozen?)
            @cache[mod] = type
          end
          type
        end
      end
    end

    class Untyped < TypedClass
      def initialize
        super(T.untyped)
      end

      module Private
        INSTANCE = Untyped.new.freeze
      end
    end

    class Anything < TypedClass
      def initialize
        super(T.anything)
      end

      module Private
        INSTANCE = Anything.new.freeze
      end
    end
  end
end

Version data entries

147 entries across 141 versions & 2 rubygems

Version Path
sorbet-runtime-0.5.11105 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11104 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11097 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11094 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11090 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11089 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11088 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11081 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11077 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11074 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11072 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11068 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11066 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11064 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11063 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11062 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11061 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11054 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11053 lib/types/types/typed_class.rb
sorbet-runtime-0.5.11048 lib/types/types/typed_class.rb