Skip to content

Commit 61f7370

Browse files
committed
Add typeChecks to the library
Follow up of #6135
1 parent d249926 commit 61f7370

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package scala.tests
2+
3+
import scala.quoted._
4+
import scala.tasty.Reflection
5+
6+
object TypeChecking {
7+
8+
inline def typeChecks(inline code: String): Boolean = ${ typeChecksImpl(code) }
9+
10+
private def typeChecksImpl(code: String)(implicit reflect: Reflection): Expr[Boolean] = {
11+
import reflect._
12+
typing.typeChecks(code).toExpr
13+
}
14+
15+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import scala.tests.TypeChecking._
2+
3+
object Test {
4+
5+
trait Eq[T]
6+
implicit val eq: Eq[Int] = new Eq[Int] {}
7+
8+
implicit class AnyOps[T](x: T) {
9+
def === (y: T)(implicit c: Eq[T]) = x == y
10+
}
11+
12+
def main(args: Array[String]): Unit = {
13+
assert(typeChecks("5 === 5"))
14+
assert(!typeChecks("5.6 === 7.7"))
15+
16+
val x: Int = 5
17+
assert(typeChecks("x + 3"))
18+
assert(!typeChecks("y + 3"))
19+
import scala.util.Left
20+
assert(typeChecks("Left(3)"))
21+
assert(!typeChecks("Rigth(3)"))
22+
23+
def f(x: Int): Int = x * x
24+
assert(typeChecks("f(3)"))
25+
assert(!typeChecks("g(3)"))
26+
27+
type T
28+
assert(typeChecks("def foo(x: T): T = x"))
29+
assert(!typeChecks("foo(???)"))
30+
assert(!typeChecks("def foo(x: S): S = x"))
31+
32+
assert(!typeChecks("def test(x: Int) ="))
33+
34+
assert(typeChecks(
35+
"""
36+
class EqString extends Eq[String]
37+
new EqString
38+
"""
39+
))
40+
}
41+
}

0 commit comments

Comments
 (0)