Skip to content

Commit 6c5960a

Browse files
committed
Cross compile to Scala 3.0.0-M1
1 parent c7a0306 commit 6c5960a

File tree

8 files changed

+35
-13
lines changed

8 files changed

+35
-13
lines changed

build.sbt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ ThisBuild / homepage := Some(url("https://github.com/cucumber/cucumber-jvm-scala
2222
val scala211 = "2.11.12"
2323
val scala212 = "2.12.12"
2424
val scala213 = "2.13.3"
25+
val scala3 = "3.0.0-M1"
2526

2627
scalaVersion := scala213
2728

@@ -42,9 +43,11 @@ lazy val commonSettings = Seq(
4243
case Some((2, 11)) => ScalacOptions.scalacOptions211
4344
case Some((2, 12)) => ScalacOptions.scalacOptions212
4445
case Some((2, 13)) => ScalacOptions.scalacOptions213
46+
case Some((3, 0)) => ScalacOptions.scalacOptions3
4547
case _ => Seq()
4648
}
4749
},
50+
scalacOptions ++= { if (isDotty.value) Seq("-source:3.0-migration") else Nil }
4851
)
4952

5053
lazy val root = (project in file("."))
@@ -67,11 +70,11 @@ lazy val cucumberScala = (projectMatrix in file("cucumber-scala"))
6770

6871
// Users have to provide it (for JacksonDefaultDataTableTransformer)
6972
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion % Provided,
70-
"com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion % Provided,
73+
("com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion % Provided).withDottyCompat(scalaVersion.value),
7174

7275
"junit" % "junit" % junitVersion % Test,
7376
"io.cucumber" % "cucumber-junit" % cucumberVersion % Test,
74-
"org.mockito" %% "mockito-scala" % mockitoScalaVersion % Test
77+
("org.mockito" %% "mockito-scala" % mockitoScalaVersion % Test).withDottyCompat(scalaVersion.value)
7578
),
7679
libraryDependencies ++= {
7780
CrossVersion.partialVersion(scalaVersion.value) match {
@@ -93,7 +96,7 @@ lazy val cucumberScala = (projectMatrix in file("cucumber-scala"))
9396
Seq(file)
9497
}.taskValue
9598
)
96-
.jvmPlatform(scalaVersions = Seq(scala213, scala212, scala211))
99+
.jvmPlatform(scalaVersions = Seq(scala3, scala213, scala212, scala211))
97100

98101
// Examples project
99102
lazy val examples = (projectMatrix in file("examples"))
@@ -107,7 +110,7 @@ lazy val examples = (projectMatrix in file("examples"))
107110
publishArtifact := false
108111
)
109112
.dependsOn(cucumberScala % Test)
110-
.jvmPlatform(scalaVersions = Seq(scala213, scala212))
113+
.jvmPlatform(scalaVersions = Seq(scala3, scala213, scala212))
111114

112115
// Release & Publish
113116

cucumber-scala/src/main/scala/io/cucumber/scala/GlueAdaptor.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class GlueAdaptor(glue: Glue) {
1313
def loadRegistry(registry: ScalaDslRegistry, scenarioScoped: Boolean): Unit = {
1414

1515
// If the registry is not consistent, this indicates a mistake in the users definition and we want to let him know.
16-
registry.checkConsistency().left.foreach { ex: IncorrectHookDefinitionException =>
16+
registry.checkConsistency().left.foreach { (ex: IncorrectHookDefinitionException) =>
1717
throw ex
1818
}
1919

cucumber-scala/src/main/scala/io/cucumber/scala/Implicits.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ object Implicits {
3232
def asScalaMaps[K, V](implicit evK: ClassTag[K], evV: ClassTag[V]): Seq[Map[K, Option[V]]] = {
3333
table.asMaps[K, V](evK.runtimeClass, evV.runtimeClass)
3434
.asScala
35-
.map(_.asScala.map(nullToNone).toMap)
35+
.map(_.asScala.map(nullToNone(_)).toMap)
3636
.toSeq
3737
}
3838

@@ -72,7 +72,7 @@ object Implicits {
7272
def asScalaMap[K, V](implicit evK: ClassTag[K], evV: ClassTag[V]): Map[K, Option[V]] = {
7373
table.asMap[K, V](evK.runtimeClass, evV.runtimeClass)
7474
.asScala
75-
.map(nullToNone)
75+
.map(nullToNone(_))
7676
.toMap
7777
}
7878

@@ -165,7 +165,7 @@ object Implicits {
165165
def asScalaRowColumnMap[K](implicit evK: ClassTag[K]): Map[K, Map[String, Option[String]]] = {
166166
table.asMap[K, java.util.Map[String, String]](evK.runtimeClass, classOf[java.util.Map[String, String]])
167167
.asScala
168-
.map { case (k, v) => (k, v.asScala.map(nullToNone).toMap) }
168+
.map { case (k, v) => (k, v.asScala.map(nullToNone(_)).toMap) }
169169
.toMap
170170
}
171171

cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDsl.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.cucumber.scala
22

33
import Aliases._
44

5+
import scala.annotation.nowarn
56
import scala.reflect.ClassTag
67

78
private[scala] trait BaseScalaDsl {
@@ -521,7 +522,8 @@ private[scala] trait StepDsl extends BaseScalaDsl {
521522
*
522523
**/
523524
def apply(f: => Unit): Unit = {
524-
apply(() => f)
525+
val fun0 = () => f
526+
apply(fun0)
525527
}
526528

527529
def apply(fun: Fun0): Unit = {

examples/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import scala.collection.mutable.Queue
66
sealed trait Arg
77

88
object Arg{
9-
implicit def op(s:String) = Op(s)
10-
implicit def value(v:Double) = Val(v)
9+
implicit def op(s:String): Op = Op(s)
10+
implicit def value(v:Double): Val = Val(v)
1111
}
1212

1313
case class Op(value: String) extends Arg

project/I18nGenerator.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ object I18nGenerator {
1010

1111
private def keywordVal(kw: String): String = {
1212
val keyworkValName = java.text.Normalizer.normalize(kw.replaceAll("[\\s',!]", ""), java.text.Normalizer.Form.NFC)
13-
s"""val $keyworkValName = new Step("$keyworkValName")"""
13+
s"""\tval $keyworkValName = new Step("$keyworkValName")"""
1414
}
1515

1616
private def traitCode(language: String): String = {

project/ScalacOptions.scala

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
object ScalacOptions {
22

3+
val scalacOptions3 = Seq(
4+
"-rewrite",
5+
"-deprecation", // Emit warning and location for usages of deprecated APIs.
6+
"-explain", // Explain type errors in more detail.
7+
// "-explaintypes", // Explain type errors in more detail.
8+
"-feature", // Emit warning and location for usages of features that should be imported explicitly.
9+
"-language:existentials", // Existential types (besides wildcard types) can be written and inferred
10+
"-language:experimental.macros", // Allow macro definition (besides implementation and application)
11+
"-language:higherKinds", // Allow higher-kinded types
12+
"-language:implicitConversions", // Allow definition of implicit functions called views
13+
"-unchecked", // Enable additional warnings where generated code depends on assumptions.
14+
"-Xfatal-warnings" // Fail the compilation if there are any warnings.
15+
)
16+
317
// Source: https://nathankleyn.com/2019/05/13/recommended-scalac-flags-for-2-13/
418
val scalacOptions213 = Seq(
519
"-deprecation", // Emit warning and location for usages of deprecated APIs.
@@ -39,7 +53,7 @@ object ScalacOptions {
3953
"-Ywarn-value-discard", // Warn when non-Unit expression results are unused.
4054
"-Ybackend-parallelism", "8", // Enable paralellisation — change to desired number!
4155
"-Ycache-plugin-class-loader:last-modified", // Enables caching of classloaders for compiler plugins
42-
"-Ycache-macro-class-loader:last-modified", // and macro definitions. This can lead to performance improvements.
56+
"-Ycache-macro-class-loader:last-modified" // and macro definitions. This can lead to performance improvements.
4357
)
4458

4559
val scalacOptions212 = Seq(

project/plugins.sbt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
// Cross compilation matrix
22
addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.6.0")
33

4+
// Scala 3 (Dotty)
5+
addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.4.6")
6+
47
// Release
58
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.13")
69

0 commit comments

Comments
 (0)