scalaplayframeworksbtscalac

-Ywarn-unused-import triggering on play routes file


I want to be able to use -Xfatal-warnings and -Ywarn-unused-import, the problem is that the compiler is triggering an error on the file which contains the play routes for my application:

[error] /path/to/app/conf/routes: Unused import
[error] /path/to/app/conf/routes: Unused import
[error] /path/to/app/conf/routes:1: Unused import
[error] GET        /document/:id        my.app.controllers.MyController.getById(id: Int)

same goes for other routes.

Is it possible maybe to tell scalac to ignore a file?

Scala version is 2.11.8.


Solution

  • I've come up with a working solution for Scala 2.13.7 (no need for any plugin) for Play 2.8.11. Take a look on those examples and adjust to your needs:

    scalacOptions ++= Seq(
        "-Wconf:cat=unused-imports&site=.*views.html.*:s", // Silence import warnings in Play html files
        "-Wconf:cat=unused-imports&site=<empty>:s", // Silence import warnings on Play `routes` files
        "-Wconf:cat=unused-imports&site=router:s", // Silence import warnings on Play `routes` files
        "-Wconf:cat=unused-imports&site=v1:s", // Silence import warnings on Play `v1.routes` files
        "-Wconf:cat=unused-imports&site=v2:s", // Silence import warnings on Play `v2.routes` files
        "-Wconf:cat=unused-imports&site=views.v1:s", // Silence import warnings on Play `views.v1.routes` files
        "-Wconf:cat=deprecation&site=controllers\\.v1.*&origin=scala.util.Either.right:s", // Silence deprecations in generated Controller classes
        "-Wconf:cat=deprecation&site=.*v1.Routes.*&origin=scala.util.Either.right:s"
      ) // Silence deprecations in generated Controller classes
    

    If you want to understand more, take a look on this documentation and add verbose information on the compiler messages output

    scalacOptions += "-Wconf:any:wv",
    

    Pro tip: fail compilation of unused only within CI

    scalacOptions ++= {
      // Mark unused errors as info for local development (due to -Werror usage)
      if (insideCI.value) Seq.empty else Seq("-Wconf:cat=unused:i")
    },