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.10987 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10985 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10984 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10983 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10981 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10978 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10974 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10972 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10969 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10965 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10962 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10958 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10957 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10953 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10952 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10950 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10948 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10946 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10941 lib/types/types/typed_class.rb
sorbet-runtime-0.5.10940 lib/types/types/typed_class.rb