lib/rbs/definition_builder.rb in rbs-1.0.4 vs lib/rbs/definition_builder.rb in rbs-1.0.5
- old
+ new
@@ -137,13 +137,12 @@
ensure_namespace!(type_name.namespace, location: entry.decls[0].decl.location)
case entry
when Environment::ClassEntry, Environment::ModuleEntry
ancestors = ancestor_builder.instance_ancestors(type_name)
- self_type = Types::ClassInstance.new(name: type_name,
- args: Types::Variable.build(entry.type_params.each.map(&:name)),
- location: nil)
+ args = Types::Variable.build(entry.type_params.each.map(&:name))
+ self_type = Types::ClassInstance.new(name: type_name, args: args, location: nil)
Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
one_ancestors = ancestor_builder.one_instance_ancestors(type_name)
methods = method_builder.build_instance(type_name)
@@ -215,10 +214,12 @@
interface_methods: interface_methods,
methods: methods,
super_interface_method: entry.is_a?(Environment::ModuleEntry))
entry.decls.each do |d|
+ subst = Substitution.build(d.decl.type_params.each.map(&:name), args)
+
d.decl.members.each do |member|
case member
when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
if member.kind == :instance
ivar_name = case member.ivar_name
@@ -227,15 +228,21 @@
else
member.ivar_name || :"@#{member.name}"
end
if ivar_name
- insert_variable(type_name, definition.instance_variables, name: ivar_name, type: member.type)
+ insert_variable(type_name,
+ definition.instance_variables,
+ name: ivar_name,
+ type: member.type.sub(subst))
end
end
when AST::Members::InstanceVariable
- insert_variable(type_name, definition.instance_variables, name: member.name, type: member.type)
+ insert_variable(type_name,
+ definition.instance_variables,
+ name: member.name,
+ type: member.type.sub(subst))
when AST::Members::ClassVariable
insert_variable(type_name, definition.class_variables, name: member.name, type: member.type)
end
end