63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/rbs/validator.rb', line 63
def validate_type_alias(entry:)
type_name = entry.decl.name
if type_alias_dependency.circular_definition?(type_name)
location = entry.decl.location or raise
raise RecursiveTypeAliasError.new(alias_names: [type_name], location: location)
end
if diagnostic = type_alias_regularity.nonregular?(type_name)
location = entry.decl.location or raise
raise NonregularTypeAliasError.new(diagnostic: diagnostic, location: location)
end
unless entry.decl.type_params.empty?
calculator = VarianceCalculator.new(builder: definition_builder)
result = calculator.in_type_alias(name: type_name)
if set = result.incompatible?(entry.decl.type_params)
set.each do |param_name|
param = entry.decl.type_params.find {|param| param.name == param_name } or raise
next if param.unchecked?
raise InvalidVarianceAnnotationError.new(
type_name: type_name,
param: param,
location: entry.decl.type.location
)
end
end
validate_type_params(
entry.decl.type_params,
type_name: type_name,
location: entry.decl.location&.aref(:type_params)
)
end
if block_given?
yield entry.decl.type
end
end
|