Object
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 6 def initialize(name,, variance,, upper_bound,, location)) @name = name @variance = variance @upper_bound = upper_bound @location = location @unchecked = false end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 91 def self.rename(params, new_names)) raise unless params.size == new_names.size subst = Substitution.build(new_names, Types::Variable.build(new_names)) params.map.with_index do |param, index| new_name = new_names[index] TypeParam.new( name: new_name, variance: param.variance, upper_bound: param.upper_bound&.map_type {|type| type.sub(subst) }, location: param.location ).unchecked!(param.unchecked?) end end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 69 def self.resolve_variables(params) return if params.empty? vars = Set.new(params.map(&:name)) params.map! do |param| param.map_type {|bound| _ = subst_var(vars, bound) } end end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 79 def self.subst_var(vars, type) case type when Types::ClassInstance namespace = type.name.namespace if namespace.relative? && namespace.empty? && vars.member?(type.name.name) return Types::Variable.new(name: type.name.name, location: type.location) end end type.map_type {|t| subst_var(vars, t) } end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 23 def ==(other) other.is_a?(TypeParam) && other.name == name && other.variance == variance && other.upper_bound == upper_bound && other.unchecked? == unchecked? end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 33 def hash self.class.hash ^ name.hash ^ variance.hash ^ upper_bound.hash ^ unchecked?.hash end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 56 def map_type(&block) if b = upper_bound _upper_bound = yield(b) end TypeParam.new( name: name, variance: variance, upper_bound: _upper_bound, location: location ).unchecked!(unchecked?) end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 47 def rename(name) TypeParam.new( name: name, variance: variance, upper_bound: upper_bound, location: location ).unchecked!(unchecked?) end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 37 def to_json(state = JSON::State.new) { name: name, variance: variance, unchecked: unchecked?, location: location, upper_bound: upper_bound }.to_json(state) end
# File rbs-2.1.0/lib/rbs/ast/type_param.rb, line 108 def to_s s = "" if unchecked? s << "unchecked " end case variance when :invariant # nop when :covariant s << "out " when :contravariant s << "in " end s << name.to_s if type = upper_bound s << " < #{type}" end s end