lib/rbs/definition_builder/ancestor_builder.rb in rbs-1.2.1 vs lib/rbs/definition_builder/ancestor_builder.rb in rbs-1.3.0
- old
+ new
@@ -235,10 +235,11 @@
end
end
end
mixin_ancestors(entry,
+ type_name,
included_modules: ancestors.included_modules,
included_interfaces: ancestors.included_interfaces,
prepended_modules: ancestors.prepended_modules,
extended_modules: nil,
extended_interfaces: nil)
@@ -282,10 +283,11 @@
super_class: Definition::Ancestor::Instance.new(name: BuiltinNames::Module.name, args: [], source: :super)
)
end
mixin_ancestors(entry,
+ type_name,
included_modules: nil,
included_interfaces: nil,
prepended_modules: nil,
extended_modules: ancestors.extended_modules,
extended_interfaces: ancestors.extended_interfaces)
@@ -299,39 +301,42 @@
entry = env.interface_decls[type_name] or raise "Unknown name for one_interface_ancestors: #{type_name}"
params = entry.decl.type_params.each.map(&:name)
OneAncestors.interface(type_name: type_name, params: params).tap do |ancestors|
mixin_ancestors0(entry.decl,
+ type_name,
align_params: nil,
included_modules: nil,
included_interfaces: ancestors.included_interfaces,
prepended_modules: nil,
extended_modules: nil,
extended_interfaces: nil)
end
end
end
- def mixin_ancestors0(decl, align_params:, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
+ def mixin_ancestors0(decl, type_name, align_params:, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
decl.each_mixin do |member|
case member
when AST::Members::Include
module_name = member.name
module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
ancestor = Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
case
when member.name.class? && included_modules
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
NoMixinFoundError.check!(member.name, env: env, member: member)
included_modules << ancestor
when member.name.interface? && included_interfaces
NoMixinFoundError.check!(member.name, env: env, member: member)
included_interfaces << ancestor
end
when AST::Members::Prepend
if prepended_modules
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
NoMixinFoundError.check!(member.name, env: env, member: member)
module_name = member.name
module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
@@ -343,29 +348,31 @@
module_args = member.args
ancestor = Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
case
when member.name.class? && extended_modules
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
NoMixinFoundError.check!(member.name, env: env, member: member)
extended_modules << ancestor
when member.name.interface? && extended_interfaces
NoMixinFoundError.check!(member.name, env: env, member: member)
extended_interfaces << ancestor
end
end
end
end
- def mixin_ancestors(entry, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
+ def mixin_ancestors(entry, type_name, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
entry.decls.each do |d|
decl = d.decl
align_params = Substitution.build(
decl.type_params.each.map(&:name),
Types::Variable.build(entry.type_params.each.map(&:name))
)
mixin_ancestors0(decl,
+ type_name,
align_params: align_params,
included_modules: included_modules,
included_interfaces: included_interfaces,
extended_modules: extended_modules,
prepended_modules: prepended_modules,