Ужасным «решением» может быть удаление этих неиспользуемых импортов после создания маршрутов, но до запуска задачи компиляции. Вот набросок:
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())
}
Затем вы захотите разобраться в зависимостях задач:
// 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
Вам также, вероятно, потребуется установить TwirlKeys.templateImports
в консервативный список, прежде чем включать -Ywarn-unused-import
. Что-то вроде этого, в зависимости от того, какие типы используются в ваших представлениях:
TwirlKeys.templateImports := Seq("play.api.mvc._", "play.api.i18n.Messages", "controllers.routes")
Мне также пришлось выбить неиспользуемые TemplateMagic
импорты из шаблонов Twirl (YMMV):
removeUnusedImports(
_ / "twirl" ** "*.template.scala",
Set("import play.twirl.api.TemplateMagic._"),
Map())
Если вы это сделаете, убедитесь, что зависимости задачи настроены соответствующим образом.
Это работает для меня. Scala 2.11.8, Play 2.5.10, -Xfatal-warnings
и -Ywarn-unused-import
включены. Это ужасно, но это работает.
person
danielnixon
schedule
17.01.2017
2.11.8
, здесь вы можете найти пример проекта, просто необходимо составить. - person Ende Neu   schedule 18.07.2016Routes.scala
, но компилятор указывает непосредственно на файлroutes
, и я не уверен, почему и имеет ли это значение. Что касается форматера, scalariform не поддерживает оптимизацию импорта, возможно, ее можно установить в Intellij. Насчет scalac даже не знаю с чего начинать, гугление тоже не помогло. - person Ende Neu   schedule 31.08.2016warn-unused-import
. Вы когда-нибудь находили решение этой проблемы? - person Abhijit Sarkar   schedule 02.01.2017