Skip to content

Commit 94df476

Browse files
authored
Add a T.self_type test (#9600)
I've been looking at the implementation of `fixed` vs `lower+upper`, and I can see a world where once we build support for `T.self_type`, we accidentally change the behavior on `fixed` but not on `lower+upper`, so I'd like to commit a test case for it before I forget.
1 parent 7c291ad commit 94df476

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

‎test/testdata/infer/type_member_self_type.rb‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,33 @@ class ChildA < A
4141
res = ChildA.new.my_dup
4242
# ^^^^^^ error: Expression does not have a fully-defined type
4343
T.reveal_type(res) # error: `T.untyped`
44+
45+
class B
46+
extend T::Sig, T::Generic
47+
X = type_member { {lower: T.self_type, upper: T.self_type} }
48+
49+
sig { returns(X) }
50+
def my_dup = self # error: Expected `B::X` but found `B[B::X]` for method result type
51+
end
52+
53+
p(B)
54+
b = B.new
55+
T.reveal_type(b) # error: `B[T.untyped]`
56+
57+
class ChildB < B
58+
X = type_member { {lower: T.self_type, upper: T.self_type} }
59+
end
60+
61+
class C
62+
extend T::Sig, T::Generic
63+
X = type_member(:out) { {lower: T.self_type, upper: T.self_type} }
64+
65+
sig { returns(X) }
66+
def my_dup = self # error: Expected `C::X` but found `C[C::X]`
67+
end
68+
69+
p(C)
70+
# ^ error: does not have a fully-defined type
71+
b = C.new
72+
# ^ error: does not have a fully-defined type
73+
T.reveal_type(b) # error: `T.untyped`

0 commit comments

Comments
 (0)