diff --git a/build.sbt b/build.sbt index acf8d04..8693f75 100644 --- a/build.sbt +++ b/build.sbt @@ -1,20 +1,25 @@ val Leaf = "0.1.0" val Scala2_11 = "2.11.12" -val Scala2_12 = "2.12.13" -val Scala2_13 = "2.13.4" -val ScalaTest = "3.2.4-M1" +val Scala2_12 = "2.12.15" +val Scala2_13 = "2.13.8" +val Scala3 = "3.1.1" +val ScalaTest = "3.2.12" val SharedSettings = Seq( name := "trail", organization := "tech.sparse", scalaVersion := Scala2_13, - crossScalaVersions := Seq(Scala2_13, Scala2_12, Scala2_11), - scalacOptions := Seq( - "-unchecked", - "-deprecation", - "-encoding", "utf8" - ), + crossScalaVersions := Seq(Scala3, Scala2_13, Scala2_12, Scala2_11), + scalacOptions := { + // Preserve -scalajs flag used by Scala.js on Scala 3 + scalacOptions.value.filter(_ == "-scalajs") ++ + Seq( + "-unchecked", + "-deprecation", + "-encoding", "utf8" + ) + }, pomExtra := https://github.com/sparsetech/trail @@ -60,3 +65,9 @@ lazy val manual = project.in(file("manual")) publishArtifact := false, libraryDependencies += "tech.sparse" %% "leaf-notebook" % Leaf ) + +def isScala3(ver: String) = + CrossVersion.partialVersion(ver) match { + case Some((3, _)) => true + case _ => false + } diff --git a/native/src/main/scala/trail/URI.scala b/native/src/main/scala/trail/URI.scala index 496bf40..f00d114 100644 --- a/native/src/main/scala/trail/URI.scala +++ b/native/src/main/scala/trail/URI.scala @@ -25,7 +25,7 @@ object URI { if (c == '+') result.append(' ') else if (c == '%') { out.reset() - do { + while({ if (i + 2 >= s.length) throw new IllegalArgumentException("Incomplete % sequence at: " + i) val d1 = Character.digit(s.charAt(i + 1), 16) @@ -35,7 +35,8 @@ object URI { s"Invalid % sequence (${s.substring(i, i + 3)}) at: ${String.valueOf(i)}.") out.write(((d1 << 4) + d2).toByte) i += 3 - } while (i < s.length && s.charAt(i) == '%') + (i < s.length && s.charAt(i) == '%') + }) { } result.append(out.toString("UTF-8")) } else { result.append(c) diff --git a/project/build.properties b/project/build.properties index d91c272..c8fcab5 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.4.6 +sbt.version=1.6.2 diff --git a/project/plugins.sbt b/project/plugins.sbt index dfbeda3..d3405e6 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,5 +2,5 @@ logLevel := Level.Warn addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.0.0") addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "1.0.0") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.3.1") -addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.9.0") +addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.4") diff --git a/shared/src/main/scala/trail/PathElement.scala b/shared/src/main/scala/trail/PathElement.scala index 5af4b18..c0890b0 100644 --- a/shared/src/main/scala/trail/PathElement.scala +++ b/shared/src/main/scala/trail/PathElement.scala @@ -1,6 +1,6 @@ package trail -case class Arg[T]()(implicit val codec: Codec[T]) { +class Arg[T]()(implicit val codec: Codec[T]) { override def equals(o: Any): Boolean = o match { case a: Arg[T] => a.codec.equals(codec) @@ -10,6 +10,10 @@ case class Arg[T]()(implicit val codec: Codec[T]) { override def hashCode(): Int = ("trail.Arg", codec).hashCode() } +object Arg { + def apply[T](implicit codec: Codec[T]) = new Arg() +} + case class Param[T](name: String)(implicit val codec: Codec[T]) { override def equals(o: Any): Boolean = o match { @@ -20,7 +24,7 @@ case class Param[T](name: String)(implicit val codec: Codec[T]) { override def hashCode(): Int = ("trail.Param", name, codec).hashCode() } -case class Fragment[T]()(implicit val codec: Codec[T]) { +class Fragment[T](implicit val codec: Codec[T]) { override def equals(o: Any): Boolean = o match { case f: Fragment[T] => f.codec.equals(codec) @@ -29,3 +33,7 @@ case class Fragment[T]()(implicit val codec: Codec[T]) { override def hashCode(): Int = ("trail.Fragment", codec).hashCode() } + +object Fragment { + def apply[T](implicit codec: Codec[T]) = new Fragment[T] +}