Explore removal of cats dependency
scala-libs-wrapper contains cats dependency. cats contains roughly 50 MB of classes. It is a big dependency. This task is about exploring if we can easily get rid of this dependency so that our scala-libs-wrapper-assembly-0.1.0-SNAPSHOT.jar is smaller.
The only place that I can see uses cats is from project-manager which depends on dev.zip:zio-interop-cats:23.0.0.6.
Remove the dependency by deleting this line: https://github.com/enso-org/enso/blob/f0cbf1a8ade9f48bd321a842ddb1075678842b96/build.sbt#L1304
Quite a few places use cats explicitly:
grep -r "import cats" .
./engine/launcher/src/main/scala/org/enso/launcher/cli/LauncherApplication.scala:import cats.data.NonEmptyList
./engine/launcher/src/main/scala/org/enso/launcher/cli/LauncherApplication.scala:import cats.implicits._
./engine/launcher/src/main/scala/org/enso/launcher/cli/InternalOpts.scala:import cats.implicits._
./lib/scala/cli/src/test/scala/org/enso/cli/OptsSpec.scala:import cats.implicits._
./lib/scala/cli/src/test/scala/org/enso/cli/ApplicationSpec.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/test/scala/org/enso/cli/ApplicationSpec.scala:import cats.implicits._
./lib/scala/cli/src/main/scala/org/enso/cli/arguments/Application.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/arguments/OptsParseError.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/arguments/OptsParseError.scala:import cats.implicits._
./lib/scala/cli/src/main/scala/org/enso/cli/arguments/OptsParseError.scala:import cats.kernel.Semigroup
./lib/scala/cli/src/main/scala/org/enso/cli/arguments/Opts.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/arguments/Opts.scala:import cats.implicits._
./lib/scala/cli/src/main/scala/org/enso/cli/arguments/Opts.scala:import cats.{Functor, Semigroupal}
./lib/scala/cli/src/main/scala/org/enso/cli/internal/CLIOutputInternal.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/internal/opts/SubcommandOpt.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/internal/opts/OptsMap.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/internal/opts/BaseSubcommandOpt.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/internal/opts/OptsProduct.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/internal/opts/OptsMapWithErrors.scala:import cats.data.NonEmptyList
./lib/scala/cli/src/main/scala/org/enso/cli/internal/opts/TopLevelCommandsOpt.scala:import cats.Semigroupal
./lib/scala/cli/src/main/scala/org/enso/cli/internal/opts/TopLevelCommandsOpt.scala:import cats.data.NonEmptyList
./lib/scala/project-manager/src/main/scala/org/enso/projectmanager/service/ProjectService.scala:import cats.MonadError
./lib/scala/project-manager/src/main/scala/org/enso/projectmanager/service/validation/ModuleNameValidator.scala:import cats.MonadError
./lib/scala/project-manager/src/main/scala/org/enso/projectmanager/service/validation/ProjectNameValidator.scala:import cats.MonadError
./lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/MainModule.scala:import cats.MonadError
./lib/scala/json-rpc-server/src/main/scala/org/enso/jsonrpc/Protocol.scala: import cats.syntax.functor._
Building engine-runner/rebuildNativeImage with --emit=build-report on latest develop reveals that there is, indeed, no cats code in engine-runner NI.
Inside NI of project-manager, cats occupies just negligible 0.022 % (10.57 KB) code size.
- Build report of engine-runner uploaded at engine-runner-build-report.tar.gz
- Build report of project-manager uploaded at project-manager-build-report.tar.gz
From the transitive dependencies that rely on cats there is only a set of circe libraries. We can replace them with com.github.plokhotnyuk.jsoniter-scala that is already used in the project.
That's not much. I believe we can start working on replacing circe with jsoniter in our subprojects one by one:
pkgeditionsedition-updatersemverdownloaderclijson-rpc-server- ~
polyglot-api~ #13300 language-serverproject-manager