Una "soluzione" orribile potrebbe essere quella di rimuovere quelle importazioni inutilizzate dopo che i percorsi sono stati generati ma prima che venga eseguita l'attività di compilazione. Ecco uno schizzo:
lazy val optimizeRoutesImports = taskKey[Unit]("Remove unused imports from generated routes sources.")
optimizeRoutesImports := {
def removeUnusedImports(targetFiles: (File) => PathFinder, linesToRemove: Set[String], linesToReplace: Map[String, String]) = {
val files = targetFiles(crossTarget.value).get
files foreach { file =>
val lines = sbt.IO.readLines(file)
val updatedLines = lines map { line =>
linesToReplace.getOrElse(line, line)
} filterNot { line =>
linesToRemove.contains(line.trim)
}
sbt.IO.writeLines(file, updatedLines, append = false)
}
}
removeUnusedImports(
_/"routes"/"main"/"controllers"/"ReverseRoutes.scala",
Set("import ReverseRouteContext.empty"),
Map(
"import play.api.mvc.{ QueryStringBindable, PathBindable, Call, JavascriptLiteral }" ->
"import play.api.mvc.{ QueryStringBindable, PathBindable, Call }",
"import play.core.routing.{ HandlerDef, ReverseRouteContext, queryString, dynamicString }" ->
"import play.core.routing.{ ReverseRouteContext, queryString, dynamicString }"
)
)
removeUnusedImports(
_/"routes"/"main"/"controllers"/"javascript"/"JavaScriptReverseRoutes.scala",
Set(
"import play.core.routing.{ HandlerDef, ReverseRouteContext, queryString, dynamicString }",
"import ReverseRouteContext.empty"
),
Map(
"import play.api.mvc.{ QueryStringBindable, PathBindable, Call, JavascriptLiteral }" ->
"import play.api.mvc.{ QueryStringBindable, PathBindable }"
)
)
removeUnusedImports(
_/"routes"/"main"/"router"/"Routes.scala",
Set("import play.core.j._"),
Map())
}
Sarai quindi vuole risolvere le dipendenze attività:
// Our optimize routes imports task depends on the routes task.
optimizeRoutesImports := (optimizeRoutesImports dependsOn (play.sbt.routes.RoutesKeys.routes in Compile)).value
// And compilation depends on the unused routes having been removed.
compile := ((compile in Compile) dependsOn optimizeRoutesImports).value
avrete anche probabile che sia necessario impostare TwirlKeys.templateImports
a una lista conservatrice prima di attivare -Ywarn-unused-import
. Qualcosa di simile, a seconda di quali tipi sono utilizzati in vostro punto di vista:
TwirlKeys.templateImports := Seq("play.api.mvc._", "play.api.i18n.Messages", "controllers.routes")
ho anche dovuto battere inutilizzato TemplateMagic
importazioni su modelli Twirl (misura con le pinze):
removeUnusedImports(
_/"twirl" ** "*.template.scala",
Set("import play.twirl.api.TemplateMagic._"),
Map())
Se lo fai, fanno sicuro che le dipendenze delle attività siano impostate in modo appropriato.
Questo funziona per me. Scala 2.11.8, Riproduci 2.5.10, entrambi -Xfatal-warnings
e -Ywarn-unused-import
abilitati. È orribile, ma funziona.
Quale versione di scala? Ho fornito una correzione per l'avviso relativo alla ricerca implicita, qualche tempo fa. Vorrei provare un progetto di esempio, se puoi farlo. Non c'è alcun meccanismo per ignorare un file, tranne che in 2.11 è possibile fornire un reporter che fa quello che vuole. –
@ som-snytt Sto usando scala '2.11.8', [qui puoi trovare un progetto di esempio] (https://github.com/EndeNeu/wron-warn-example), deve solo essere compilato –
qualsiasi aggiornamento sull'argomento? –