From adc9a59d57ef697b252a26efd865927510c811e1 Mon Sep 17 00:00:00 2001 From: Dave Smith Date: Tue, 9 Apr 2024 09:09:11 +0100 Subject: [PATCH] Upgrade to Scala 3.4.1 --- build.sbt | 4 ++-- examples/build.sbt | 2 +- examples/mill/build.sc | 2 +- examples/server-examples/build.sbt | 2 +- .../src/main/scala/com/example/example/Routes.scala | 2 +- .../subcomponents/src/main/scala/example/Main.scala | 2 +- .../.jvm/src/main/scala/example/InfiniteScroll.scala | 2 +- tyrian-io/src/main/scala/tyrian/TyrianIOApp.scala | 6 +++--- tyrian-zio/src/main/scala/tyrian/TyrianZIOApp.scala | 6 +++--- tyrian/js/src/main/scala/tyrian/Cmd.scala | 2 +- tyrian/js/src/main/scala/tyrian/Sub.scala | 4 ++-- tyrian/js/src/main/scala/tyrian/TyrianAppF.scala | 6 +++--- .../js/src/main/scala/tyrian/runtime/SubHelper.scala | 12 ++++++------ .../shared/src/main/scala/tyrian/HTMLRendering.scala | 2 +- tyrian/shared/src/main/scala/tyrian/Html.scala | 2 +- website/build.sbt | 2 +- 16 files changed, 29 insertions(+), 29 deletions(-) diff --git a/build.sbt b/build.sbt index 7c3152de..480a0ac9 100644 --- a/build.sbt +++ b/build.sbt @@ -15,10 +15,10 @@ ThisBuild / versionScheme := Some("early-semver") ThisBuild / scalaVersion := scala3Version lazy val tyrianVersion = TyrianVersion.getVersion -lazy val scala3Version = "3.3.3" +lazy val scala3Version = "3.4.1" lazy val tyrianDocsVersion = "0.10.0" lazy val scalaJsDocsVersion = "1.16.0" -lazy val scalaDocsVersion = "3.3.3" +lazy val scalaDocsVersion = "3.4.1" lazy val indigoDocsVersion = "0.16.0" lazy val commonSettings: Seq[sbt.Def.Setting[_]] = Seq( diff --git a/examples/build.sbt b/examples/build.sbt index 159ce387..4aab3e53 100644 --- a/examples/build.sbt +++ b/examples/build.sbt @@ -6,7 +6,7 @@ import sbtwelcome._ Global / onChangedBuildSource := ReloadOnSourceChanges lazy val tyrianVersion = TyrianVersion.getVersion -lazy val scala3Version = "3.3.3" +lazy val scala3Version = "3.4.1" lazy val commonSettings: Seq[sbt.Def.Setting[_]] = Seq( version := tyrianVersion, diff --git a/examples/mill/build.sc b/examples/mill/build.sc index 95a29e0a..1fe2c342 100644 --- a/examples/mill/build.sc +++ b/examples/mill/build.sc @@ -9,7 +9,7 @@ import io.github.davidgregory084.TpolecatModule object counter extends ScalaJSModule with TpolecatModule { - def scalaVersion = "3.3.3" + def scalaVersion = "3.4.1" def scalaJSVersion = "1.16.0" def buildSite() = diff --git a/examples/server-examples/build.sbt b/examples/server-examples/build.sbt index 7bab6c69..2a13a64c 100644 --- a/examples/server-examples/build.sbt +++ b/examples/server-examples/build.sbt @@ -8,7 +8,7 @@ val LogbackVersion = "1.2.6" val MunitCatsEffectVersion = "1.0.6" lazy val tyrianVersion = TyrianVersion.getVersion -lazy val scala3Version = "3.3.3" +lazy val scala3Version = "3.4.1" Global / onChangedBuildSource := ReloadOnSourceChanges diff --git a/examples/server-examples/server/src/main/scala/com/example/example/Routes.scala b/examples/server-examples/server/src/main/scala/com/example/example/Routes.scala index 16eff4d3..b9f0d77d 100644 --- a/examples/server-examples/server/src/main/scala/com/example/example/Routes.scala +++ b/examples/server-examples/server/src/main/scala/com/example/example/Routes.scala @@ -25,7 +25,7 @@ object Routes: case request @ GET -> Root / "spa.js" => val spa = fs2.io.file.Path( "." - ) / "spa" / "target" / "scala-3.3.3" / "spa-opt" / "main.js" + ) / "spa" / "target" / "scala-3.4.1" / "spa-opt" / "main.js" StaticFile.fromPath(spa.absolute, Some(request)).getOrElseF(NotFound(spa.absolute.toString)) case GET -> Root / "ssr" / in => diff --git a/examples/subcomponents/src/main/scala/example/Main.scala b/examples/subcomponents/src/main/scala/example/Main.scala index ab9100b6..fb854694 100644 --- a/examples/subcomponents/src/main/scala/example/Main.scala +++ b/examples/subcomponents/src/main/scala/example/Main.scala @@ -43,7 +43,7 @@ object Main extends TyrianIOApp[Msg, Model]: button(onClick(Msg.Insert))(text("insert")) ) ++ counters - div()(elems: _*) + div()(elems*) def subscriptions(model: Model): Sub[IO, Msg] = Sub.None diff --git a/sandbox-ssr/.jvm/src/main/scala/example/InfiniteScroll.scala b/sandbox-ssr/.jvm/src/main/scala/example/InfiniteScroll.scala index 9ad0ba04..21008ac8 100644 --- a/sandbox-ssr/.jvm/src/main/scala/example/InfiniteScroll.scala +++ b/sandbox-ssr/.jvm/src/main/scala/example/InfiniteScroll.scala @@ -18,7 +18,7 @@ object InfiniteScroll: table(hxIndicator := ".htmx-indicator")( thead(tr(th("Name"), th("Id"))), tbody( - rows: _* + rows* ) ) ) diff --git a/tyrian-io/src/main/scala/tyrian/TyrianIOApp.scala b/tyrian-io/src/main/scala/tyrian/TyrianIOApp.scala index 3009a28b..d0bafb4f 100644 --- a/tyrian-io/src/main/scala/tyrian/TyrianIOApp.scala +++ b/tyrian-io/src/main/scala/tyrian/TyrianIOApp.scala @@ -11,8 +11,8 @@ trait TyrianIOApp[Msg, Model] extends TyrianAppF[IO, Msg, Model]: val run: IO[Nothing] => Unit = _.unsafeRunAndForget() object TyrianIOApp: - def onLoad(appDirectory: (String, TyrianAppF[IO, _, _])*): Unit = - TyrianAppF.onLoad(appDirectory: _*) + def onLoad(appDirectory: (String, TyrianAppF[IO, ?, ?])*): Unit = + TyrianAppF.onLoad(appDirectory*) - def launch(appDirectory: Map[String, TyrianAppF[IO, _, _]]): Unit = + def launch(appDirectory: Map[String, TyrianAppF[IO, ?, ?]]): Unit = TyrianAppF.launch(appDirectory) diff --git a/tyrian-zio/src/main/scala/tyrian/TyrianZIOApp.scala b/tyrian-zio/src/main/scala/tyrian/TyrianZIOApp.scala index 8d7a6316..944dbb9d 100644 --- a/tyrian-zio/src/main/scala/tyrian/TyrianZIOApp.scala +++ b/tyrian-zio/src/main/scala/tyrian/TyrianZIOApp.scala @@ -21,8 +21,8 @@ trait TyrianZIOApp[Msg, Model](using Async[Task]) extends TyrianAppF[Task, Msg, } object TyrianZIOApp: - def onLoad(appDirectory: (String, TyrianAppF[Task, _, _])*)(using Async[Task]): Unit = - TyrianAppF.onLoad(appDirectory: _*) + def onLoad(appDirectory: (String, TyrianAppF[Task, ?, ?])*)(using Async[Task]): Unit = + TyrianAppF.onLoad(appDirectory*) - def launch(appDirectory: Map[String, TyrianAppF[Task, _, _]])(using Async[Task]): Unit = + def launch(appDirectory: Map[String, TyrianAppF[Task, ?, ?]])(using Async[Task]): Unit = TyrianAppF.launch(appDirectory) diff --git a/tyrian/js/src/main/scala/tyrian/Cmd.scala b/tyrian/js/src/main/scala/tyrian/Cmd.scala index 53add30a..21fdfad4 100644 --- a/tyrian/js/src/main/scala/tyrian/Cmd.scala +++ b/tyrian/js/src/main/scala/tyrian/Cmd.scala @@ -27,7 +27,7 @@ sealed trait Cmd[+F[_], +Msg]: Cmd.merge(this, other) object Cmd: - given CanEqual[Cmd[_, _], Cmd[_, _]] = CanEqual.derived + given CanEqual[Cmd[?, ?], Cmd[?, ?]] = CanEqual.derived final def merge[F[_], Msg, LubMsg >: Msg](a: Cmd[F, Msg], b: Cmd[F, LubMsg]): Cmd[F, LubMsg] = (a, b) match { diff --git a/tyrian/js/src/main/scala/tyrian/Sub.scala b/tyrian/js/src/main/scala/tyrian/Sub.scala index 4a7aa375..96cc29a1 100644 --- a/tyrian/js/src/main/scala/tyrian/Sub.scala +++ b/tyrian/js/src/main/scala/tyrian/Sub.scala @@ -43,8 +43,8 @@ sealed trait Sub[+F[_], +Msg]: object Sub: - given CanEqual[Option[_], Option[_]] = CanEqual.derived - given CanEqual[Sub[_, _], Sub[_, _]] = CanEqual.derived + given CanEqual[Option[?], Option[?]] = CanEqual.derived + given CanEqual[Sub[?, ?], Sub[?, ?]] = CanEqual.derived final def merge[F[_], Msg, LubMsg >: Msg](a: Sub[F, Msg], b: Sub[F, LubMsg]): Sub[F, LubMsg] = (a, b) match { diff --git a/tyrian/js/src/main/scala/tyrian/TyrianAppF.scala b/tyrian/js/src/main/scala/tyrian/TyrianAppF.scala index e928f4a6..6a6d0a25 100644 --- a/tyrian/js/src/main/scala/tyrian/TyrianAppF.scala +++ b/tyrian/js/src/main/scala/tyrian/TyrianAppF.scala @@ -133,7 +133,7 @@ object TyrianAppF: /** Launch app instances after DOMContentLoaded. */ @nowarn("msg=discarded") - def onLoad[F[_]: Async](appDirectory: Map[String, TyrianAppF[F, _, _]]): Unit = + def onLoad[F[_]: Async](appDirectory: Map[String, TyrianAppF[F, ?, ?]]): Unit = val documentReady = new Promise((resolve, _reject) => { document.addEventListener("DOMContentLoaded", _ => resolve(())) if (document.readyState != DocumentReadyState.loading) { @@ -143,12 +143,12 @@ object TyrianAppF: }) documentReady.`then`(_ => launch[F](appDirectory)) - def onLoad[F[_]: Async](appDirectory: (String, TyrianAppF[F, _, _])*): Unit = + def onLoad[F[_]: Async](appDirectory: (String, TyrianAppF[F, ?, ?])*): Unit = onLoad(appDirectory.toMap) /** Find data-tyrian-app HTMLElements and launch corresponding TyrianAppF instances */ - def launch[F[_]: Async](appDirectory: Map[String, TyrianAppF[F, _, _]]): Unit = + def launch[F[_]: Async](appDirectory: Map[String, TyrianAppF[F, ?, ?]]): Unit = document.querySelectorAll("[data-tyrian-app]").foreach { element => val tyrianAppElement = element.asInstanceOf[HTMLElement] val tyrianAppName = tyrianAppElement.dataset.get("tyrianApp") diff --git a/tyrian/js/src/main/scala/tyrian/runtime/SubHelper.scala b/tyrian/js/src/main/scala/tyrian/runtime/SubHelper.scala index d05b98c1..6f0b8f31 100644 --- a/tyrian/js/src/main/scala/tyrian/runtime/SubHelper.scala +++ b/tyrian/js/src/main/scala/tyrian/runtime/SubHelper.scala @@ -11,9 +11,9 @@ import scala.annotation.tailrec object SubHelper: // Flatten all the subs into a list of indvidual subs. - def flatten[F[_], Msg](sub: Sub[F, Msg]): List[Sub.Observe[F, _, Msg]] = + def flatten[F[_], Msg](sub: Sub[F, Msg]): List[Sub.Observe[F, ?, Msg]] = @tailrec - def rec(remaining: List[Sub[F, Msg]], acc: List[Sub.Observe[F, _, Msg]]): List[Sub.Observe[F, _, Msg]] = + def rec(remaining: List[Sub[F, Msg]], acc: List[Sub.Observe[F, ?, Msg]]): List[Sub.Observe[F, ?, Msg]] = remaining match case Nil => acc @@ -28,22 +28,22 @@ object SubHelper: rec(sbs ++ ss, acc) case (s: Sub.Observe[_, _, _]) :: ss => - rec(ss, s.asInstanceOf[Sub.Observe[F, _, Msg]] :: acc) + rec(ss, s.asInstanceOf[Sub.Observe[F, ?, Msg]] :: acc) rec(List(sub), Nil) def aliveAndDead[F[_]: Concurrent, Msg]( - subs: List[Sub.Observe[F, _, Msg]], + subs: List[Sub.Observe[F, ?, Msg]], current: List[(String, F[Unit])] ): (List[(String, F[Unit])], List[F[Unit]]) = val (a, d) = current.partition { case (id, _) => subs.exists(_.id == id) } (a, d.map(_._2)) def findNewSubs[F[_]: Concurrent, Msg]( - subs: List[Sub.Observe[F, _, Msg]], + subs: List[Sub.Observe[F, ?, Msg]], alive: List[String], inProgress: List[String] - ): List[Sub.Observe[F, _, Msg]] = + ): List[Sub.Observe[F, ?, Msg]] = subs.filter(s => alive.forall(_ != s.id) && !inProgress.contains(s.id)) def runObserve[F[_], A, Msg](sub: Sub.Observe[F, A, Msg])(callback: Either[Throwable, Option[Msg]] => Unit)(using diff --git a/tyrian/shared/src/main/scala/tyrian/HTMLRendering.scala b/tyrian/shared/src/main/scala/tyrian/HTMLRendering.scala index b8cec7c4..2d0697cf 100644 --- a/tyrian/shared/src/main/scala/tyrian/HTMLRendering.scala +++ b/tyrian/shared/src/main/scala/tyrian/HTMLRendering.scala @@ -32,7 +32,7 @@ extension [Msg](html: Html[Msg]) s"""<${tag.name}$attributes>$children""" -extension (a: Attr[_]) +extension (a: Attr[?]) def render: String = a match case _: Event[_, _] => "" diff --git a/tyrian/shared/src/main/scala/tyrian/Html.scala b/tyrian/shared/src/main/scala/tyrian/Html.scala index be47b2af..1cd4b1e9 100644 --- a/tyrian/shared/src/main/scala/tyrian/Html.scala +++ b/tyrian/shared/src/main/scala/tyrian/Html.scala @@ -71,7 +71,7 @@ object Html extends HtmlTags with HtmlAttributes: Property("type", "radio"), Property("name", name), if checked then Property("checked", "checked") else Property.empty - ) ++ attributes: _* + ) ++ attributes* ) def text(plainText: String): Text = Text(plainText) diff --git a/website/build.sbt b/website/build.sbt index 56511fa3..617ec02c 100644 --- a/website/build.sbt +++ b/website/build.sbt @@ -15,7 +15,7 @@ import scala.concurrent.duration.DurationInt import laika.sbt.LaikaPreviewConfig import java.time.OffsetDateTime -ThisBuild / scalaVersion := "3.3.3" +ThisBuild / scalaVersion := "3.4.1" enablePlugins(LaikaPlugin, GhpagesPlugin)