Module: Tapioca::TypeVariableHelper

Extended by:
T::Sig, SorbetHelper
Defined in:
lib/tapioca/helpers/type_variable_helper.rb

Constant Summary

Constants included from SorbetHelper

SorbetHelper::FEATURE_REQUIREMENTS, SorbetHelper::SORBET_BIN, SorbetHelper::SORBET_EXE_PATH_ENV_VAR, SorbetHelper::SORBET_GEM_SPEC

Class Method Summary collapse

Methods included from SorbetHelper

sorbet, sorbet_path, sorbet_supports?

Class Method Details

.serialize_type_variable(type, variance, fixed, upper, lower) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/tapioca/helpers/type_variable_helper.rb', line 18

def self.serialize_type_variable(type, variance, fixed, upper, lower)
  variance = nil if variance == :invariant

  bounds = []
  bounds << "fixed: #{fixed}" if fixed
  bounds << "lower: #{lower}" if lower
  bounds << "upper: #{upper}" if upper

  parameters = []
  block = []

  parameters << ":#{variance}" if variance

  if sorbet_supports?(:type_variable_block_syntax)
    block = bounds
  else
    parameters.concat(bounds)
  end

  serialized = type.dup
  serialized << "(#{parameters.join(", ")})" unless parameters.empty?
  serialized << " { { #{block.join(", ")} } }" unless block.empty?
  serialized
end