From 5bcea8e82dfed511671dee3bc9500434efa92abf Mon Sep 17 00:00:00 2001 From: ksss Date: Sat, 22 Feb 2025 00:06:23 +0900 Subject: [PATCH 1/2] Validate type application for superclass --- lib/rbs/definition_builder/ancestor_builder.rb | 1 + test/rbs/ancestor_builder_test.rb | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/rbs/definition_builder/ancestor_builder.rb b/lib/rbs/definition_builder/ancestor_builder.rb index 81c5273b3..9a5710375 100644 --- a/lib/rbs/definition_builder/ancestor_builder.rb +++ b/lib/rbs/definition_builder/ancestor_builder.rb @@ -217,6 +217,7 @@ def one_instance_ancestors(type_name) NoSuperclassFoundError.check!(super_name, env: env, location: primary.decl.location) if super_class InheritModuleError.check!(super_class, env: env) + InvalidTypeApplicationError.check2!(type_name: super_class.name, args: super_class.args, env: env, location: super_class.location) end super_entry = env.normalized_class_entry(super_name) or raise diff --git a/test/rbs/ancestor_builder_test.rb b/test/rbs/ancestor_builder_test.rb index 5c8fe144e..1482f0ffc 100644 --- a/test/rbs/ancestor_builder_test.rb +++ b/test/rbs/ancestor_builder_test.rb @@ -665,6 +665,12 @@ class B < Y[Integer, void] class C extend X end + +class D +end + +class E < D[Integer] +end EOF manager.build do |env| builder = DefinitionBuilder::AncestorBuilder.new(env: env) @@ -680,6 +686,10 @@ class C assert_raises InvalidTypeApplicationError do builder.singleton_ancestors(type_name("::C")) end + + assert_raises InvalidTypeApplicationError do + builder.instance_ancestors(type_name("::E")) + end end end end From ffa79162e7a7df32b9a3628ea56b5304662f72d3 Mon Sep 17 00:00:00 2001 From: ksss Date: Sat, 22 Feb 2025 00:06:54 +0900 Subject: [PATCH 2/2] Validate type application for module-self-type --- lib/rbs/definition_builder/ancestor_builder.rb | 1 + test/rbs/ancestor_builder_test.rb | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/lib/rbs/definition_builder/ancestor_builder.rb b/lib/rbs/definition_builder/ancestor_builder.rb index 9a5710375..0b513779b 100644 --- a/lib/rbs/definition_builder/ancestor_builder.rb +++ b/lib/rbs/definition_builder/ancestor_builder.rb @@ -244,6 +244,7 @@ def one_instance_ancestors(type_name) else entry.self_types.each do |module_self| NoSelfTypeFoundError.check!(module_self, env: env) + InvalidTypeApplicationError.check2!(type_name: module_self.name, args: module_self.args, env: env, location: module_self.location) module_name = module_self.name if module_name.class? diff --git a/test/rbs/ancestor_builder_test.rb b/test/rbs/ancestor_builder_test.rb index 1482f0ffc..ae8579c3b 100644 --- a/test/rbs/ancestor_builder_test.rb +++ b/test/rbs/ancestor_builder_test.rb @@ -671,7 +671,12 @@ class D class E < D[Integer] end + +module F : D[Integer] +end EOF + + manager.build do |env| builder = DefinitionBuilder::AncestorBuilder.new(env: env) @@ -690,6 +695,10 @@ class E < D[Integer] assert_raises InvalidTypeApplicationError do builder.instance_ancestors(type_name("::E")) end + + assert_raises InvalidTypeApplicationError do + builder.instance_ancestors(type_name("::F")) + end end end end