lib/rbs/definition_builder.rb in rbs-1.7.1 vs lib/rbs/definition_builder.rb in rbs-1.8.0
- old
+ new
@@ -779,12 +779,39 @@
cc[key] ||= yield
end
def expand_alias(type_name)
- entry = env.alias_decls[type_name] or raise "Unknown name for expand_alias: #{type_name}"
+ expand_alias2(type_name, [])
+ end
+
+ def expand_alias1(type_name)
+ entry = env.alias_decls[type_name] or raise "Unknown alias name: #{type_name}"
+ as = entry.decl.type_params.each.map { Types::Bases::Any.new(location: nil) }
+ expand_alias2(type_name, as)
+ end
+
+ def expand_alias2(type_name, args)
+ entry = env.alias_decls[type_name] or raise "Unknown alias name: #{type_name}"
+
ensure_namespace!(type_name.namespace, location: entry.decl.location)
- entry.decl.type
+ params = entry.decl.type_params.each.map(&:name)
+
+ unless params.size == args.size
+ as = "[#{args.join(", ")}]" unless args.empty?
+ ps = "[#{params.join(", ")}]" unless params.empty?
+
+ raise "Invalid type application: type = #{type_name}#{as}, decl = #{type_name}#{ps}"
+ end
+
+ type = entry.decl.type
+
+ unless params.empty?
+ subst = Substitution.build(params, args)
+ type = type.sub(subst)
+ end
+
+ type
end
def update(env:, except:, ancestor_builder:)
method_builder = self.method_builder.update(env: env, except: except)