Skip to content

Commit 88c9cf6

Browse files
nicolasstuckicheeseng
authored andcommitted
Use typeChecks directly where possible
1 parent 675dfb8 commit 88c9cf6

File tree

3 files changed

+29
-27
lines changed

3 files changed

+29
-27
lines changed

scalatest.dotty/src/main/scala/org/scalatest/Assertions.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import org.scalatest.exceptions.TestFailedException
2727
import org.scalatest.exceptions.TestPendingException
2828
import org.scalactic.anyvals.NonEmptyArray
2929
import scala.quoted._
30+
import scala.compiletime.testing.typeChecks
3031
import org.scalatest.compatible.Assertion
3132
import ArrayHelper.deep
3233

@@ -660,7 +661,7 @@ trait Assertions extends TripleEquals {
660661
* @param code the snippet of code that should not type check
661662
*/
662663
inline def assertTypeError(inline code: String)(implicit pos: source.Position): Assertion =
663-
${ CompileMacro.assertTypeErrorImpl(code, '{ pos }) }
664+
${ CompileMacro.assertTypeErrorImpl('code, typeChecks(code), '{ pos }) }
664665

665666
/**
666667
* Asserts that a given string snippet of code does not pass either the Scala parser or type checker.
@@ -692,7 +693,7 @@ trait Assertions extends TripleEquals {
692693
* @param code the snippet of code that should not type check
693694
*/
694695
inline def assertDoesNotCompile(inline code: String)(implicit pos: source.Position): Assertion =
695-
${ CompileMacro.assertDoesNotCompileImpl(code, '{ pos }) }
696+
${ CompileMacro.assertDoesNotCompileImpl('code, typeChecks(code), 'pos) }
696697

697698
/**
698699
* Asserts that a given string snippet of code passes both the Scala parser and type checker.
@@ -714,7 +715,7 @@ trait Assertions extends TripleEquals {
714715
* @param code the snippet of code that should compile
715716
*/
716717
inline def assertCompiles(inline code: String)(implicit pos: source.Position): Assertion =
717-
${ CompileMacro.assertCompilesImpl(code, '{ pos }) }
718+
${ CompileMacro.assertCompilesImpl('code, typeChecks(code), 'pos) }
718719

719720
/**
720721
* Intercept and return an exception that's expected to

scalatest.dotty/src/main/scala/org/scalatest/CompileMacro.scala

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,22 @@ import scala.quoted._
2323
object CompileMacro {
2424

2525
// parse and type check a code snippet, generate code to throw TestFailedException when type check passes or parse error
26-
def assertTypeErrorImpl(code: String, pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Assertion] = {
26+
def assertTypeErrorImpl(code: Expr[String], typeChecked: Boolean, pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Assertion] = {
2727
import qctx.tasty._
2828

29-
if (!typing.typeChecks(code)) '{ Succeeded }
29+
if (!typeChecked) '{ Succeeded }
3030
else '{
31-
val messageExpr = Resources.expectedTypeErrorButGotNone(${ code.toExpr })
31+
val messageExpr = Resources.expectedTypeErrorButGotNone($code)
3232
throw new TestFailedException((_: StackDepthException) => Some(messageExpr), None, $pos)
3333
}
3434
}
3535

36-
def expectTypeErrorImpl(code: String, prettifier: Expr[Prettifier], pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Fact] = {
36+
def expectTypeErrorImpl(code: Expr[String], typeChecked: Boolean, prettifier: Expr[Prettifier], pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Fact] = {
3737
import qctx.tasty._
3838

39-
if (typing.typeChecks(code))
39+
if (typeChecked)
4040
'{
41-
val messageExpr = Resources.expectedTypeErrorButGotNone(${ code.toExpr })
41+
val messageExpr = Resources.expectedTypeErrorButGotNone($code)
4242
Fact.No(
4343
messageExpr,
4444
messageExpr,
@@ -52,7 +52,7 @@ object CompileMacro {
5252
}
5353
else
5454
'{
55-
val messageExpr = Resources.gotTypeErrorAsExpected(${ code.toExpr })
55+
val messageExpr = Resources.gotTypeErrorAsExpected($code)
5656

5757
Fact.Yes(
5858
messageExpr,
@@ -68,23 +68,23 @@ object CompileMacro {
6868
}
6969

7070
// parse and type check a code snippet, generate code to throw TestFailedException when both parse and type check succeeded
71-
def assertDoesNotCompileImpl(code: String, pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Assertion] = {
71+
def assertDoesNotCompileImpl(code: Expr[String], typeChecked: Boolean, pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Assertion] = {
7272
import qctx.tasty._
7373

74-
if (!typing.typeChecks(code)) '{ Succeeded }
74+
if (!typeChecked) '{ Succeeded }
7575
else '{
76-
val messageExpr = Resources.expectedCompileErrorButGotNone(${ code.toExpr })
76+
val messageExpr = Resources.expectedCompileErrorButGotNone($code)
7777
throw new TestFailedException((_: StackDepthException) => Some(messageExpr), None, $pos)
7878
}
7979
}
8080

8181
// parse and type check a code snippet, generate code to return Fact (Yes or No).
82-
def expectDoesNotCompileImpl(code: String, prettifier: Expr[Prettifier], pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Fact] = {
82+
def expectDoesNotCompileImpl(code: Expr[String], typeChecked: Boolean, prettifier: Expr[Prettifier], pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Fact] = {
8383
import qctx.tasty._
8484

85-
if (typing.typeChecks(code))
85+
if (typeChecked)
8686
'{
87-
val messageExpr = Resources.expectedCompileErrorButGotNone(${ code.toExpr })
87+
val messageExpr = Resources.expectedCompileErrorButGotNone($code)
8888
Fact.No(
8989
messageExpr,
9090
messageExpr,
@@ -98,7 +98,7 @@ object CompileMacro {
9898
}
9999
else
100100
'{
101-
val messageExpr = Resources.didNotCompile(${ code.toExpr })
101+
val messageExpr = Resources.didNotCompile($code)
102102

103103
Fact.Yes(
104104
messageExpr,
@@ -114,22 +114,22 @@ object CompileMacro {
114114
}
115115

116116
// parse and type check a code snippet, generate code to throw TestFailedException when either parse or type check fails.
117-
def assertCompilesImpl(code: String, pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Assertion] = {
117+
def assertCompilesImpl(code: Expr[String], typeChecked: Boolean, pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Assertion] = {
118118
import qctx.tasty._
119119

120-
if (typing.typeChecks(code)) '{ Succeeded }
120+
if (typeChecked) '{ Succeeded }
121121
else '{
122-
val messageExpr = Resources.expectedNoErrorButGotTypeError("unknown", ${ code.toExpr })
122+
val messageExpr = Resources.expectedNoErrorButGotTypeError("unknown", $code)
123123
throw new TestFailedException((_: StackDepthException) => Some(messageExpr), None, $pos)
124124
}
125125
}
126126

127-
def expectCompilesImpl(code: String, prettifier: Expr[Prettifier], pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Fact] = {
127+
def expectCompilesImpl(code: Expr[String], typeChecked: Boolean, prettifier: Expr[Prettifier], pos: Expr[source.Position])(implicit qctx: QuoteContext): Expr[Fact] = {
128128
import qctx.tasty._
129129

130-
if (typing.typeChecks(code))
130+
if (typeChecked)
131131
'{
132-
val messageExpr = Resources.compiledSuccessfully(${ code.toExpr })
132+
val messageExpr = Resources.compiledSuccessfully($code)
133133
Fact.Yes(
134134
messageExpr,
135135
messageExpr,
@@ -143,7 +143,7 @@ object CompileMacro {
143143
}
144144
else
145145
'{
146-
val messageExpr = Resources.expectedNoErrorButGotTypeError("", ${ code.toExpr })
146+
val messageExpr = Resources.expectedNoErrorButGotTypeError("", $code)
147147

148148
Fact.No(
149149
messageExpr,

scalatest.dotty/src/main/scala/org/scalatest/expectations/Expectations.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import Fact._
2121
import scala.concurrent.ExecutionContext
2222
import scala.concurrent.Future
2323
import scala.reflect.ClassTag
24+
import scala.compiletime.testing.typeChecks
2425

2526
private[scalatest] trait Expectations {
2627

@@ -111,13 +112,13 @@ private[scalatest] trait Expectations {
111112
${ ExpectationsMacro.expect('{expression})('{prettifier}, '{pos}) }
112113

113114
inline def expectDoesNotCompile(inline code: String)(implicit prettifier: Prettifier, pos: source.Position): Fact =
114-
${ CompileMacro.expectDoesNotCompileImpl(code, 'prettifier, 'pos) }
115+
${ CompileMacro.expectDoesNotCompileImpl('code, typeChecks(code), 'prettifier, 'pos) }
115116

116117
inline def expectCompiles(inline code: String)(implicit prettifier: Prettifier, pos: source.Position): Fact =
117-
${ CompileMacro.expectCompilesImpl(code, 'prettifier, 'pos) }
118+
${ CompileMacro.expectCompilesImpl('code, typeChecks(code), 'prettifier, 'pos) }
118119

119120
inline def expectTypeError(inline code: String)(implicit prettifier: Prettifier, pos: source.Position): Fact =
120-
${ CompileMacro.expectTypeErrorImpl(code, 'prettifier, 'pos) }
121+
${ CompileMacro.expectTypeErrorImpl('code, typeChecks(code), 'prettifier, 'pos) }
121122

122123
import scala.language.implicitConversions
123124

0 commit comments

Comments
 (0)