When I compile my project in Scala 3 with scalac option -Xcheck-macros, I get following exception:
Exception occurred while executing macro expansion.
scala.quoted.runtime.impl.ScopeException: Expression created in a splice was used outside of that splice.
Created in: cask\src-3\cask\router\Macros.scala:279 at column 28
Used in: cask\src-3\cask\router\Macros.scala:124 at column 28
Expr: validated
Creation stack:
cask\src-3\cask\router\Macros.scala:279 at column 28
cask\src-3\cask\router\RoutesEndpointMetadata.scala:13 at column 17
cask\src-3\cask\main\Routes.scala:15 at column 51
Use stack:
cask\src-3\cask\router\Macros.scala:124 at column 28
cask\src-3\cask\router\RoutesEndpointMetadata.scala:13 at column 17
cask\src-3\cask\main\Routes.scala:15 at column 51
Hint: A common reason for this to happen is when a `def` that creates a `'{...}`
captures an outer instance of `Quotes`. If this `def` is called in a splice
it will not track the `Quotes` provided by that particular splice.
To fix it add a `given Quotes` to this `def`.
Details
at scala.quoted.runtime.impl.ScopeException$.checkInCorrectScope(ScopeException.scala:35)
at dotty.tools.dotc.quoted.PickledQuotes$.quotedExprToTree(PickledQuotes.scala:40)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:112)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1538)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1498)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1498)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1498)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1506)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:152)
at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:88)
at scala.quoted.runtime.impl.QuotesImpl.unpickleExprV2(QuotesImpl.scala:3143)
at cask.router.Macros$.$anonfun$1$$anonfun$1(Macros.scala:124)
at cask.router.Macros$.$anonfun$1$$anonfun$adapted$1(Macros.scala:125)
at scala.collection.immutable.List.map(List.scala:246)
at cask.router.Macros$.$anonfun$1(Macros.scala:125)
at cask.router.Macros$.$anonfun$adapted$1(Macros.scala:126)
at scala.collection.immutable.List.map(List.scala:246)
at cask.router.Macros$.call(Macros.scala:126)
at cask.router.Macros$.extractMethod$$anonfun$1(Macros.scala:279)
at cask.router.Macros$.extractMethod$$anonfun$adapted$1(Macros.scala:286)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:110)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1538)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1567)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1601)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1570)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1601)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1570)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1601)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1514)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:152)
at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:88)
at scala.quoted.runtime.impl.QuotesImpl.unpickleExprV2(QuotesImpl.scala:3143)
at cask.router.Macros$.extractMethod(Macros.scala:286)
at cask.router.RoutesEndpointsMetadata$.$anonfun$4(RoutesEndpointMetadata.scala:50)
at scala.collection.Iterator$$anon$9.next(Iterator.scala:584)
at scala.collection.immutable.List.prependedAll(List.scala:153)
at scala.collection.immutable.List$.from(List.scala:684)
at scala.collection.immutable.List$.from(List.scala:681)
at scala.collection.IterableOps$WithFilter.map(Iterable.scala:898)
at cask.router.RoutesEndpointsMetadata$.initializeImpl(RoutesEndpointMetadata.scala:63)
at cask.router.RoutesEndpointsMetadata$.setRoutesImpl$$anonfun$1(RoutesEndpointMetadata.scala:13)
at cask.router.RoutesEndpointsMetadata$.setRoutesImpl$$anonfun$adapted$1(RoutesEndpointMetadata.scala:13)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:110)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1538)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1601)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518)
at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135)
at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:152)
at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:88)
at scala.quoted.runtime.impl.QuotesImpl.unpickleExprV2(QuotesImpl.scala:3143)
at cask.router.RoutesEndpointsMetadata$.setRoutesImpl(RoutesEndpointMetadata.scala:13)
When not using the option, the server compiles and runs fine.
When I compile my project in Scala 3 with scalac option
-Xcheck-macros
, I get following exception:Details
at scala.quoted.runtime.impl.ScopeException$.checkInCorrectScope(ScopeException.scala:35) at dotty.tools.dotc.quoted.PickledQuotes$.quotedExprToTree(PickledQuotes.scala:40) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:112) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1538) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1498) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1498) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1498) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1506) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:152) at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:88) at scala.quoted.runtime.impl.QuotesImpl.unpickleExprV2(QuotesImpl.scala:3143) at cask.router.Macros$.$anonfun$1$$anonfun$1(Macros.scala:124) at cask.router.Macros$.$anonfun$1$$anonfun$adapted$1(Macros.scala:125) at scala.collection.immutable.List.map(List.scala:246) at cask.router.Macros$.$anonfun$1(Macros.scala:125) at cask.router.Macros$.$anonfun$adapted$1(Macros.scala:126) at scala.collection.immutable.List.map(List.scala:246) at cask.router.Macros$.call(Macros.scala:126) at cask.router.Macros$.extractMethod$$anonfun$1(Macros.scala:279) at cask.router.Macros$.extractMethod$$anonfun$adapted$1(Macros.scala:286) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:110) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1538) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1567) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) at scala.collection.immutable.List.mapConserve(List.scala:472) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1601) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1570) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) at scala.collection.immutable.List.mapConserve(List.scala:472) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1601) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) at scala.collection.immutable.List.mapConserve(List.scala:472) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1570) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) at scala.collection.immutable.List.mapConserve(List.scala:472) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1601) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1514) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) at scala.collection.immutable.List.mapConserve(List.scala:472) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:152) at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:88) at scala.quoted.runtime.impl.QuotesImpl.unpickleExprV2(QuotesImpl.scala:3143) at cask.router.Macros$.extractMethod(Macros.scala:286) at cask.router.RoutesEndpointsMetadata$.$anonfun$4(RoutesEndpointMetadata.scala:50) at scala.collection.Iterator$$anon$9.next(Iterator.scala:584) at scala.collection.immutable.List.prependedAll(List.scala:153) at scala.collection.immutable.List$.from(List.scala:684) at scala.collection.immutable.List$.from(List.scala:681) at scala.collection.IterableOps$WithFilter.map(Iterable.scala:898) at cask.router.RoutesEndpointsMetadata$.initializeImpl(RoutesEndpointMetadata.scala:63) at cask.router.RoutesEndpointsMetadata$.setRoutesImpl$$anonfun$1(RoutesEndpointMetadata.scala:13) at cask.router.RoutesEndpointsMetadata$.setRoutesImpl$$anonfun$adapted$1(RoutesEndpointMetadata.scala:13) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:110) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1538) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) at scala.collection.immutable.List.mapConserve(List.scala:472) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1504) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) at scala.collection.immutable.List.mapConserve(List.scala:472) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1601) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformBlock(Trees.scala:1603) at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:135) at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:152) at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:88) at scala.quoted.runtime.impl.QuotesImpl.unpickleExprV2(QuotesImpl.scala:3143) at cask.router.RoutesEndpointsMetadata$.setRoutesImpl(RoutesEndpointMetadata.scala:13)
When not using the option, the server compiles and runs fine.