diff --git a/.scalafix.conf b/.scalafix.conf new file mode 100644 index 0000000..689bafb --- /dev/null +++ b/.scalafix.conf @@ -0,0 +1,20 @@ +rules = [ + DisableSyntax, + LeakingImplicitClassVal, + NoAutoTupling, + NoValInForComprehension, + OrganizeImports +] + +OrganizeImports { + targetDialect = Scala3 + blankLines = Auto + expandRelative = true + removeUnused=true + groupedImports=Keep + groups = [ + "re:(javax?|scala)\\." + "*" + "scalive" + ] +} diff --git a/.scalafmt.conf b/.scalafmt.conf index d0bbe37..86ab246 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -22,3 +22,6 @@ rewrite.scala3.convertToNewSyntax = true rewrite.scala3.removeOptionalBraces = yes rewrite.scala3.insertEndMarkerMinLines = 30 rewrite.scala3.removeEndMarkerMaxLines = 29 +newlines.topLevelStatementBlankLines = [ + { regex = "^Import", blanks { after = 1 } } +] diff --git a/build.mill b/build.mill index 8f04b4b..02fb1aa 100644 --- a/build.mill +++ b/build.mill @@ -1,15 +1,19 @@ -//| mvnDeps : ["com.raquo::domtypes:18.1.0"] +//| mvnDeps: +//| - com.raquo::domtypes:18.1.0 +//| - com.goyeau::mill-scalafix::0.6.0 package build import mill.*, scalalib.*, javascriptlib.* +import mill.scalalib.scalafmt.ScalafmtModule import mill.api.Task.Simple import java.net.URI import java.nio.file.* import java.nio.file.attribute.BasicFileAttributes import java.util +import com.goyeau.mill.scalafix.ScalafixModule -trait ScalaCommon extends ScalaModule: +trait ScalaCommon extends ScalaModule with ScalafmtModule with ScalafixModule: def scalaVersion = "3.7.2" def scalacOptions = Seq( "-Wunused:all", diff --git a/core/src/TestLiveView.scala b/core/src/TestLiveView.scala index 217d445..4330d5e 100644 --- a/core/src/TestLiveView.scala +++ b/core/src/TestLiveView.scala @@ -1,11 +1,12 @@ package scalive package playground -import scalive.* import zio.* import zio.stream.ZStream -import TestView.* +import scalive.* +import scalive.playground.TestView.* + class TestView extends LiveView[Msg, Model]: def init = Model() diff --git a/core/src/main.scala b/core/src/main.scala index 8df2e26..e69a7d5 100644 --- a/core/src/main.scala +++ b/core/src/main.scala @@ -1,9 +1,10 @@ package scalive package playground -import scalive.* import zio.json.* +import scalive.* + extension (el: HtmlElement) def html: String = HtmlBuilder.build(el) import TestView.* diff --git a/core/src/scalive/HtmlBuilder.scala b/core/src/scalive/HtmlBuilder.scala index e92cdd7..e9bf0c0 100644 --- a/core/src/scalive/HtmlBuilder.scala +++ b/core/src/scalive/HtmlBuilder.scala @@ -1,6 +1,7 @@ package scalive import java.io.StringWriter + import scalive.Mod.Attr import scalive.Mod.Content diff --git a/core/src/scalive/HtmlElement.scala b/core/src/scalive/HtmlElement.scala index 776ee2f..77c877c 100644 --- a/core/src/scalive/HtmlElement.scala +++ b/core/src/scalive/HtmlElement.scala @@ -1,14 +1,15 @@ package scalive +import java.util.Base64 +import scala.util.Random + +import zio.json.* + import scalive.JSCommands.JSCommand import scalive.Mod.Attr import scalive.Mod.Content import scalive.codecs.BooleanAsAttrPresenceEncoder import scalive.codecs.Encoder -import zio.json.* - -import java.util.Base64 -import scala.util.Random class HtmlElement(val tag: HtmlTag, val mods: Vector[Mod]): def static: Seq[String] = StaticBuilder.build(this) diff --git a/core/src/scalive/JS.scala b/core/src/scalive/JS.scala index e788105..de0556f 100644 --- a/core/src/scalive/JS.scala +++ b/core/src/scalive/JS.scala @@ -1,11 +1,11 @@ package scalive -import zio.json.* -import zio.json.ast.Json - import java.util.Base64 import scala.util.Random +import zio.json.* +import zio.json.ast.Json + val JS: JSCommands.JSCommand = JSCommands.empty object JSCommands: diff --git a/core/src/scalive/StaticBuilder.scala b/core/src/scalive/StaticBuilder.scala index 85c2105..35f4291 100644 --- a/core/src/scalive/StaticBuilder.scala +++ b/core/src/scalive/StaticBuilder.scala @@ -2,6 +2,7 @@ package scalive import scala.collection.immutable.ArraySeq import scala.collection.mutable.ListBuffer + import scalive.Mod.Attr import scalive.Mod.Content diff --git a/core/src/scalive/Token.scala b/core/src/scalive/Token.scala index 5f0abd4..2e14431 100644 --- a/core/src/scalive/Token.scala +++ b/core/src/scalive/Token.scala @@ -1,7 +1,5 @@ package scalive -import zio.json.* - import java.time.Instant import java.util.Base64 import javax.crypto.Mac @@ -9,6 +7,8 @@ import javax.crypto.spec.SecretKeySpec import scala.concurrent.duration.Duration import scala.util.Random +import zio.json.* + final case class Token[T] private ( version: Int, liveViewId: String, diff --git a/example/src/CounterLiveView.scala b/example/src/CounterLiveView.scala index b659ac1..0a8f257 100644 --- a/example/src/CounterLiveView.scala +++ b/example/src/CounterLiveView.scala @@ -1,9 +1,10 @@ import CounterLiveView.* import monocle.syntax.all.* -import scalive.* import zio.* import zio.stream.ZStream +import scalive.* + class CounterLiveView() extends LiveView[Msg, Model]: def init = diff --git a/example/src/Example.scala b/example/src/Example.scala index 19c47ad..8c86f80 100644 --- a/example/src/Example.scala +++ b/example/src/Example.scala @@ -1,4 +1,3 @@ -import scalive.{label as _, *} import zio.* import zio.http.* import zio.logging.ConsoleLoggerConfig @@ -7,6 +6,8 @@ import zio.logging.LogFilter import zio.logging.LogFormat.* import zio.logging.consoleLogger +import scalive.{label as _, *} + object Example extends ZIOAppDefault: private val logFormat = diff --git a/example/src/HomeLiveView.scala b/example/src/HomeLiveView.scala index ba635d6..073eb8a 100644 --- a/example/src/HomeLiveView.scala +++ b/example/src/HomeLiveView.scala @@ -1,7 +1,8 @@ -import scalive.* import zio.* import zio.stream.ZStream +import scalive.* + class HomeLiveView() extends LiveView[String, Unit]: val links = List( "/counter" -> "Counter", diff --git a/example/src/ListLiveView.scala b/example/src/ListLiveView.scala index 138a353..3d9ad23 100644 --- a/example/src/ListLiveView.scala +++ b/example/src/ListLiveView.scala @@ -1,9 +1,10 @@ import ListLiveView.* import monocle.syntax.all.* -import scalive.* import zio.* import zio.stream.ZStream +import scalive.* + class ListLiveView(someParam: String) extends LiveView[Msg, Model]: def init = diff --git a/example/src/TodoLiveView.scala b/example/src/TodoLiveView.scala index 4231706..269d026 100644 --- a/example/src/TodoLiveView.scala +++ b/example/src/TodoLiveView.scala @@ -1,8 +1,9 @@ import TodoLiveView.* -import scalive.* import zio.* import zio.stream.ZStream +import scalive.* + class TodoLiveView() extends LiveView[Msg, Model]: def init = Model( diff --git a/zio/src/scalive/LiveRouter.scala b/zio/src/scalive/LiveRouter.scala index 38fcf8b..8bcf366 100644 --- a/zio/src/scalive/LiveRouter.scala +++ b/zio/src/scalive/LiveRouter.scala @@ -1,7 +1,8 @@ package scalive -import scalive.WebSocketMessage.Meta -import scalive.WebSocketMessage.Payload +import java.util.Base64 +import scala.util.Random + import zio.* import zio.http.* import zio.http.ChannelEvent.Read @@ -11,8 +12,8 @@ import zio.json.* import zio.stream.SubscriptionRef import zio.stream.ZStream -import java.util.Base64 -import scala.util.Random +import scalive.WebSocketMessage.Meta +import scalive.WebSocketMessage.Payload final case class LiveRoute[A, Msg, Model]( path: PathCodec[A], diff --git a/zio/src/scalive/Socket.scala b/zio/src/scalive/Socket.scala index 94a4237..33478a2 100644 --- a/zio/src/scalive/Socket.scala +++ b/zio/src/scalive/Socket.scala @@ -1,12 +1,13 @@ package scalive -import scalive.WebSocketMessage.LiveResponse -import scalive.WebSocketMessage.Payload import zio.* import zio.Queue import zio.stream.SubscriptionRef import zio.stream.ZStream +import scalive.WebSocketMessage.LiveResponse +import scalive.WebSocketMessage.Payload + final case class Socket[Msg, Model] private ( id: String, token: String, diff --git a/zio/src/scalive/WebSocketMessage.scala b/zio/src/scalive/WebSocketMessage.scala index 684b1a8..ca88db1 100644 --- a/zio/src/scalive/WebSocketMessage.scala +++ b/zio/src/scalive/WebSocketMessage.scala @@ -1,12 +1,13 @@ package scalive -import scalive.WebSocketMessage.LiveResponse -import scalive.WebSocketMessage.Payload import zio.Chunk import zio.http.QueryParams import zio.json.* import zio.json.ast.Json +import scalive.WebSocketMessage.LiveResponse +import scalive.WebSocketMessage.Payload + final case class WebSocketMessage( // Live session ID, auto increment defined by the client on join joinRef: Option[Int],