class TypedRb::Runtime::TypeSignatureProcessor

Constants

PARAMETRIC_TYPE_PREFIX

Public Class Methods

process(signature) click to toggle source
# File lib/typed/runtime/type_signature_processor.rb, line 10
def process(signature)
  type_signature = signature.split(PARAMETRIC_TYPE_PREFIX).last

  type_signature, super_type_signatures = parse_generic_supertype(type_signature)

  generic_type = ::TypedRb::TypeSignature::Parser.parse(type_signature)
  if super_type_signatures
    generic_super_types = super_type_signatures.split(/\s*,\s*/).map do |super_type_signature|
      ::TypedRb::TypeSignature::Parser.parse(super_type_signature)
    end
  end

  BasicObject::TypeRegistry.register_generic_type_information(generic_type, generic_super_types)
end
type_signature?(signature) click to toggle source
# File lib/typed/runtime/type_signature_processor.rb, line 6
def type_signature?(signature)
  signature.index(PARAMETRIC_TYPE_PREFIX) == 0
end

Private Class Methods

parse_generic_supertype(type_signature) click to toggle source

Generic types can have an explicit generic supertype. e.g: ts 'type Pair[T] super Array'

# File lib/typed/runtime/type_signature_processor.rb, line 30
def parse_generic_supertype(type_signature)
  type_signature.split(/\s*super\s*/)
end