2016-05-24 40 views
46

Voglio essere in grado di utilizzare -Xfatal-warnings e -Ywarn-unused-import, il problema è che il compilatore sta provocando un errore sul file che contiene i percorsi di gioco per la mia domanda:-Ywarn-inutilizzato-import innescando sulle rotte riprodurre il file

[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) 

lo stesso vale per altri percorsi.

E 'possibile forse dire a scalac di ignorare un file?

La versione Scala è 2.11.8.

+0

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. –

+0

@ 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 –

+0

qualsiasi aggiornamento sull'argomento? –

risposta

3

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.