lib/rbs/variance_calculator.rb in rbs-3.1.1 vs lib/rbs/variance_calculator.rb in rbs-3.1.2
- old
+ new
@@ -106,12 +106,15 @@
type(type, result: result, context: :covariant)
end
end
def in_type_alias(name:)
+ env.normalized_type_name!(name)
+
decl = env.type_alias_decls[name].decl or raise
variables = decl.type_params.each.map(&:name)
+
Result.new(variables: variables).tap do |result|
type(decl.type, result: result, context: :covariant)
end
end
@@ -127,33 +130,33 @@
when :invariant
result.invariant(type.name)
end
end
when Types::ClassInstance, Types::Interface, Types::Alias
- NoTypeFoundError.check!(type.name,
- env: env,
- location: type.location)
+ if type_name = env.normalize_type_name?(type.name)
+ type_params = case type
+ when Types::ClassInstance
+ env.class_decls[type_name].type_params
+ when Types::Interface
+ env.interface_decls[type_name].decl.type_params
+ when Types::Alias
+ env.type_alias_decls[type_name].decl.type_params
+ end
- type_params = case type
- when Types::ClassInstance
- env.class_decls[env.normalize_module_name(type.name)].type_params
- when Types::Interface
- env.interface_decls[type.name].decl.type_params
- when Types::Alias
- env.type_alias_decls[type.name].decl.type_params
- end
-
- type.args.each.with_index do |ty, i|
- if var = type_params[i]
- case var.variance
- when :invariant
- type(ty, result: result, context: :invariant)
- when :covariant
- type(ty, result: result, context: context)
- when :contravariant
- type(ty, result: result, context: negate(context))
+ type.args.each.with_index do |ty, i|
+ if var = type_params[i]
+ case var.variance
+ when :invariant
+ type(ty, result: result, context: :invariant)
+ when :covariant
+ type(ty, result: result, context: context)
+ when :contravariant
+ type(ty, result: result, context: negate(context))
+ end
end
end
+ else
+ raise NoTypeFoundError.new(type_name: type.name, location: type.location)
end
when Types::Proc
function(type.type, result: result, context: context)
else
type.each_type do |ty|