Skip to content

Commit c214951

Browse files
authored
Merge pull request #2615 from ruby/fix-type-app-validation
Validate type args given to non-generic ancestor
2 parents aab5d05 + 77aeb1e commit c214951

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

lib/rbs/ast/type_param.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def self.application(params, args)
196196
end
197197

198198
def self.normalize_args(params, args)
199-
app = application(params, args) or return []
199+
app = application(params, args) or return args
200200

201201
min_count = params.count { _1.default_type.nil? }
202202
unless min_count <= args.size && args.size <= params.size

test/rbs/ancestor_builder_test.rb

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,61 @@ module F : D[Integer]
703703
end
704704
end
705705

706+
def test_invalid_ancestor_args
707+
SignatureManager.new do |manager|
708+
manager.files[Pathname("foo.rbs")] = <<EOF
709+
module X
710+
end
711+
712+
class Y
713+
end
714+
715+
class A < Y[top]
716+
end
717+
718+
class B
719+
include X[bool]
720+
end
721+
722+
class C
723+
extend X[untyped]
724+
end
725+
726+
class D
727+
prepend X[void]
728+
end
729+
730+
module E : X[untyped]
731+
end
732+
EOF
733+
734+
735+
manager.build do |env|
736+
builder = DefinitionBuilder::AncestorBuilder.new(env: env)
737+
738+
assert_raises InvalidTypeApplicationError do
739+
builder.instance_ancestors(type_name("::A"))
740+
end
741+
742+
assert_raises InvalidTypeApplicationError do
743+
builder.instance_ancestors(type_name("::B"))
744+
end
745+
746+
assert_raises InvalidTypeApplicationError do
747+
builder.singleton_ancestors(type_name("::C"))
748+
end
749+
750+
assert_raises InvalidTypeApplicationError do
751+
builder.instance_ancestors(type_name("::D"))
752+
end
753+
754+
assert_raises InvalidTypeApplicationError do
755+
builder.instance_ancestors(type_name("::E"))
756+
end
757+
end
758+
end
759+
end
760+
706761
def test_invalid_mixin_include
707762
SignatureManager.new do |manager|
708763
manager.files[Pathname("foo.rbs")] = <<EOF

0 commit comments

Comments
 (0)