Skip to content

Commit f7d834a

Browse files
committed
WIP
1 parent 4ddae2b commit f7d834a

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

lib/rbs/environment.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ def resolve_member(resolver, member, context:)
392392
end
393393

394394
def absolute_type_name(resolver, type_name, context:, location:)
395-
resolver.resolve(type_name, context: context) or type_name
395+
resolver.resolve(type_name, context: context) || type_name
396396
end
397397

398398
def absolute_type(resolver, type, context:)

lib/rbs/errors.rb

+12-2
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,18 @@ def initialize(type_name:, location:)
108108
end
109109

110110
def self.check!(type_name, env:, location:)
111-
env.find_type_decl(type_name) or
112-
raise new(type_name: type_name, location: location)
111+
dic = case
112+
when type_name.class?
113+
env.class_decls
114+
when type_name.alias?
115+
env.alias_decls
116+
when type_name.interface?
117+
env.interface_decls
118+
else
119+
raise
120+
end
121+
122+
dic.key?(type_name) or raise new(type_name: type_name, location: location)
113123

114124
type_name
115125
end

lib/rbs/variance_calculator.rb

+7-2
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,17 @@ def type(type, result:, context:)
107107
end
108108
end
109109
when Types::ClassInstance, Types::Interface
110+
NoTypeFoundError.check!(type.name,
111+
env: env,
112+
location: type.location)
113+
110114
type_params = case type
111115
when Types::ClassInstance
112-
env.class_decls[type.name].type_params
116+
env.class_decls[type.name]&.type_params
113117
when Types::Interface
114-
env.interface_decls[type.name].decl.type_params
118+
env.interface_decls[type.name]&.decl&.type_params
115119
end
120+
116121
type.args.each.with_index do |ty, i|
117122
var = type_params.params[i]
118123
case var.variance

0 commit comments

Comments
 (0)