123456789_123456789_123456789_123456789_123456789_

Class: RBS::VarianceCalculator::Result

Relationships & Source Files
Inherits: Object
Defined in: lib/rbs/variance_calculator.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(variables:) ⇒ Result

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 8

def initialize(variables:)
  @result = {}
  variables.each do |x|
    result[x] = :unused
  end
end

Instance Attribute Details

#result (readonly)

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 6

attr_reader :result

Instance Method Details

#compatible?(var, with_annotation:) ⇒ Boolean

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 45

def compatible?(var, with_annotation:)
  variance = result[var]

  case
  when variance == :unused
    true
  when with_annotation == :invariant
    true
  when variance == with_annotation
    true
  else
    false
  end
end

#contravariant(x)

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 24

def contravariant(x)
  case result[x]
  when :unused
    result[x] = :contravariant
  when :covariant
    result[x] = :invariant
  end
end

#covariant(x)

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 15

def covariant(x)
  case result[x]
  when :unused
    result[x] = :covariant
  when :contravariant
    result[x] = :invariant
  end
end

#each(&block)

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 37

def each(&block)
  result.each(&block)
end

#include?(name) ⇒ Boolean

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 41

def include?(name)
  result.key?(name)
end

#incompatible?(params) ⇒ Boolean

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 60

def incompatible?(params)
  # @type set: Hash[Symbol]
  set = Set[]

  params.each do |param|
    unless compatible?(param.name, with_annotation: param.variance)
      set << param.name
    end
  end

  unless set.empty?
    set
  end
end

#invariant(x)

[ GitHub ]

  
# File 'lib/rbs/variance_calculator.rb', line 33

def invariant(x)
  result[x] = :invariant
end