Skip to content

Commit

Permalink
Dotty port (#35)
Browse files Browse the repository at this point in the history
Port cask to Dotty
  • Loading branch information
jodersky authored Oct 1, 2020
1 parent 3a4a535 commit ebf160f
Show file tree
Hide file tree
Showing 44 changed files with 674 additions and 210 deletions.
175 changes: 118 additions & 57 deletions build.sc
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,12 @@ import $file.example.websockets2.build
import $file.example.websockets3.build
import $file.example.websockets4.build

trait CaskModule extends ScalaModule with PublishModule{
def scalaVersion = "2.13.2"
val scala213 = "2.13.3"
val scala3 = "0.27.0-RC1"
val dottyCustomVersion = Option(sys.props("dottyVersion"))

trait CaskModule extends CrossScalaModule with PublishModule{
def isDotty = crossScalaVersion.startsWith("0")

def publishVersion = build.publishVersion()._2

Expand All @@ -43,19 +47,29 @@ trait CaskModule extends ScalaModule with PublishModule{
)
}

object cask extends CaskModule {
def moduleDeps = Seq(util.jvm)

def ivyDeps = Agg(
ivy"org.scala-lang:scala-reflect:${scalaVersion()}",
ivy"io.undertow:undertow-core:2.0.13.Final",
ivy"com.lihaoyi::upickle:1.2.0"
)
def compileIvyDeps = Agg(ivy"com.lihaoyi::acyclic:0.2.0")
def scalacOptions = Seq("-P:acyclic:force")
def scalacPluginIvyDeps = Agg(ivy"com.lihaoyi::acyclic:0.2.0")

class CaskMainModule(val crossScalaVersion: String) extends CaskModule {
def ivyDeps = T{
Agg(
ivy"io.undertow:undertow-core:2.0.13.Final",
ivy"com.lihaoyi::upickle:1.2.0"
) ++
(if(!isDotty) Agg(ivy"org.scala-lang:scala-reflect:${scalaVersion()}") else Agg())
}
def compileIvyDeps = T{ if (!isDotty) Agg(ivy"com.lihaoyi::acyclic:0.2.0") else Agg() }
def scalacOptions = T{ if (!isDotty) Seq("-P:acyclic:force") else Seq() }
def scalacPluginIvyDeps = T{ if (!isDotty) Agg(ivy"com.lihaoyi::acyclic:0.2.0") else Agg() }

object test extends Tests{
def testFrameworks = Seq("utest.runner.Framework")
def ivyDeps = Agg(
ivy"com.lihaoyi::utest::0.7.4",
ivy"com.lihaoyi::requests::0.6.5"
)
}
def moduleDeps = Seq(cask.util.jvm(crossScalaVersion))
def artifactName = "cask"
}
object cask extends Cross[CaskMainModule]((Seq(scala213, scala3) ++ dottyCustomVersion): _*) {
object util extends Module {
trait UtilModule extends CaskModule {
def artifactName = "cask-util"
Expand All @@ -68,66 +82,113 @@ object cask extends CaskModule {
)
def ivyDeps = Agg(
ivy"com.lihaoyi::sourcecode:0.2.1",
ivy"com.lihaoyi::pprint:0.5.9",
ivy"com.lihaoyi::pprint:0.6.0",
ivy"com.lihaoyi::geny:0.6.2"
)
}
class UtilJvmModule(val crossScalaVersion: String) extends UtilModule {
def platformSegment = "jvm"
def ivyDeps = super.ivyDeps() ++ Agg(
ivy"com.lihaoyi::castor::0.1.7".withDottyCompat(scalaVersion()),
ivy"org.java-websocket:Java-WebSocket:1.4.0"
)
}
object jvm extends Cross[UtilJvmModule]((Seq(scala213, scala3) ++ dottyCustomVersion): _*)

object js extends UtilModule with ScalaJSModule{
class UtilJsModule(val crossScalaVersion: String) extends UtilModule with ScalaJSModule {
def platformSegment = "js"
def scalaJSVersion = "0.6.33"
def ivyDeps = super.ivyDeps() ++ Agg(
ivy"com.lihaoyi::castor::0.1.7",
ivy"org.scala-js::scalajs-dom::0.9.7"
)
}
object jvm extends UtilModule{
def platformSegment = "jvm"
def ivyDeps = super.ivyDeps() ++ Agg(
ivy"com.lihaoyi::castor::0.1.7",
ivy"org.java-websocket:Java-WebSocket:1.4.0"
)
}
}

object test extends Tests{
object js extends Cross[UtilJsModule](scala213)

def testFrameworks = Seq("utest.runner.Framework")
def ivyDeps = Agg(
ivy"com.lihaoyi::utest::0.7.4",
ivy"com.lihaoyi::requests::0.6.5"
)
}
}

object example extends Module{
trait LocalModule extends ScalaModule{
trait LocalModule extends CrossScalaModule{
override def millSourcePath = super.millSourcePath / "app"
def moduleDeps = Seq(cask)
def moduleDeps = Seq(cask(crossScalaVersion))
}
object compress extends $file.example.compress.build.AppModule with LocalModule
object compress2 extends $file.example.compress2.build.AppModule with LocalModule
object compress3 extends $file.example.compress3.build.AppModule with LocalModule
object cookies extends $file.example.cookies.build.AppModule with LocalModule
object decorated extends $file.example.decorated.build.AppModule with LocalModule
object decorated2 extends $file.example.decorated2.build.AppModule with LocalModule
object endpoints extends $file.example.endpoints.build.AppModule with LocalModule
object formJsonPost extends $file.example.formJsonPost.build.AppModule with LocalModule
object httpMethods extends $file.example.httpMethods.build.AppModule with LocalModule
object minimalApplication extends $file.example.minimalApplication.build.AppModule with LocalModule
object minimalApplication2 extends $file.example.minimalApplication2.build.AppModule with LocalModule
object redirectAbort extends $file.example.redirectAbort.build.AppModule with LocalModule
object scalatags extends $file.example.scalatags.build.AppModule with LocalModule
object staticFiles extends $file.example.staticFiles.build.AppModule with LocalModule
object staticFiles2 extends $file.example.staticFiles2.build.AppModule with LocalModule
object todo extends $file.example.todo.build.AppModule with LocalModule
object todoApi extends $file.example.todoApi.build.AppModule with LocalModule
object todoDb extends $file.example.todoDb.build.AppModule with LocalModule
object twirl extends $file.example.twirl.build.AppModule with LocalModule
object variableRoutes extends $file.example.variableRoutes.build.AppModule with LocalModule
object websockets extends $file.example.websockets.build.AppModule with LocalModule
object websockets2 extends $file.example.websockets2.build.AppModule with LocalModule
object websockets3 extends $file.example.websockets3.build.AppModule with LocalModule
object websockets4 extends $file.example.websockets4.build.AppModule with LocalModule

val allVersions = Seq(scala213, scala3) ++ dottyCustomVersion

class CompressModule(val crossScalaVersion: String) extends $file.example.compress.build.AppModule with LocalModule
object compress extends Cross[CompressModule](allVersions: _*)

class Compress2Module(val crossScalaVersion: String) extends $file.example.compress2.build.AppModule with LocalModule
object compress2 extends Cross[Compress2Module](allVersions: _*)

class Compress3Module(val crossScalaVersion: String) extends $file.example.compress3.build.AppModule with LocalModule
object compress3 extends Cross[Compress3Module](allVersions: _*)

class CookiesModule(val crossScalaVersion: String) extends $file.example.cookies.build.AppModule with LocalModule
object cookies extends Cross[CookiesModule](allVersions: _*)

class DecoratedModule(val crossScalaVersion: String) extends $file.example.decorated.build.AppModule with LocalModule
object decorated extends Cross[DecoratedModule](allVersions: _*)

class Decorated2Module(val crossScalaVersion: String) extends $file.example.decorated2.build.AppModule with LocalModule
object decorated2 extends Cross[Decorated2Module](allVersions: _*)

class EndpointsModule(val crossScalaVersion: String) extends $file.example.endpoints.build.AppModule with LocalModule
object endpoints extends Cross[EndpointsModule](allVersions: _*)

class FormJsonPostModule(val crossScalaVersion: String) extends $file.example.formJsonPost.build.AppModule with LocalModule
object formJsonPost extends Cross[FormJsonPostModule](allVersions: _*)

class HttpMethodsModule(val crossScalaVersion: String) extends $file.example.httpMethods.build.AppModule with LocalModule
object httpMethods extends Cross[HttpMethodsModule](allVersions: _*)

class MinimalApplicationModule(val crossScalaVersion: String) extends $file.example.minimalApplication.build.AppModule with LocalModule
object minimalApplication extends Cross[MinimalApplicationModule](allVersions: _*)

class MinimalApplication2Module(val crossScalaVersion: String) extends $file.example.minimalApplication2.build.AppModule with LocalModule
object minimalApplication2 extends Cross[MinimalApplication2Module](allVersions: _*)

class RedirectAbortModule(val crossScalaVersion: String) extends $file.example.redirectAbort.build.AppModule with LocalModule
object redirectAbort extends Cross[RedirectAbortModule](allVersions: _*)

// java.lang.NoSuchMethodError: 'void geny.Writable.$init$(geny.Writable)' - geny mismatch, need to upgrade
class ScalatagsModule(val crossScalaVersion: String) extends $file.example.scalatags.build.AppModule with LocalModule
object scalatags extends Cross[ScalatagsModule](scala213)

class StaticFilesModule(val crossScalaVersion: String) extends $file.example.staticFiles.build.AppModule with LocalModule
object staticFiles extends Cross[StaticFilesModule](allVersions: _*)

class StaticFiles2Module(val crossScalaVersion: String) extends $file.example.staticFiles2.build.AppModule with LocalModule
object staticFiles2 extends Cross[StaticFiles2Module](allVersions: _*)

class TodoModule(val crossScalaVersion: String) extends $file.example.todo.build.AppModule with LocalModule
object todo extends Cross[TodoModule](scala213) // uses quill, can't enable for Dotty yet

class TodoApiModule(val crossScalaVersion: String) extends $file.example.todoApi.build.AppModule with LocalModule
object todoApi extends Cross[TodoApiModule](allVersions: _*)

class TodoDbModule(val crossScalaVersion: String) extends $file.example.todoDb.build.AppModule with LocalModule
object todoDb extends Cross[TodoDbModule](scala213) // uses quill, can't enable for Dotty yet

class TwirlModule(val crossScalaVersion: String) extends $file.example.twirl.build.AppModule with LocalModule
object twirl extends Cross[TwirlModule](allVersions: _*)

class VariableRoutesModule(val crossScalaVersion: String) extends $file.example.variableRoutes.build.AppModule with LocalModule
object variableRoutes extends Cross[VariableRoutesModule](allVersions: _*)

class WebsocketsModule(val crossScalaVersion: String) extends $file.example.websockets.build.AppModule with LocalModule
object websockets extends Cross[WebsocketsModule](allVersions: _*)

class Websockets2Module(val crossScalaVersion: String) extends $file.example.websockets2.build.AppModule with LocalModule
object websockets2 extends Cross[Websockets2Module](allVersions: _*)

class Websockets3Module(val crossScalaVersion: String) extends $file.example.websockets3.build.AppModule with LocalModule
object websockets3 extends Cross[Websockets3Module](allVersions: _*)

class Websockets4Module(val crossScalaVersion: String) extends $file.example.websockets4.build.AppModule with LocalModule
object websockets4 extends Cross[Websockets4Module](allVersions: _*)

}

def publishVersion = T.input($file.ci.version.publishVersion)
Expand Down
21 changes: 21 additions & 0 deletions cask/src-0/cask/main/Routes.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package cask.main

import cask.router.RoutesEndpointsMetadata

import language.experimental.macros

trait Routes{

def decorators = Seq.empty[cask.router.Decorator[_, _, _]]
private[this] var metadata0: RoutesEndpointsMetadata[this.type] = null
def caskMetadata =
if (metadata0 != null) metadata0
else throw new Exception("Routes not yet initialized")

protected[this] inline def initialize(): Unit = ${
RoutesEndpointsMetadata.setRoutesImpl[this.type](
'{(x: RoutesEndpointsMetadata[this.type]) => metadata0 = x}
)
}

}
Loading

0 comments on commit ebf160f

Please sign in to comment.