Plugin de compilateur Scala pour détecter les expressions inutilisées (non Unit ).
Zerowaste est actuellement disponible pour Scala 2.12.17+, 2.13.10+, 3.2.1+, 3.3.0+ et 3.4.0+
Les plugins du compilateur doivent être construits transversaux pour chaque version mineure et patch de Scala. Si zerowaste n'est pas disponible pour une version Scala que vous souhaitez utiliser (très probablement certaines fraîchement publiées), veuillez déposer un problème ou soumettre un PR.
crossScalaVersions dans build.sbtsbt githubWorkflowGeneratebuild.sbt et github La programmation fonctionnelle pure fonctionne sous le principe que les expressions sont exemptes d'effets secondaires. Les effets secondaires sont plutôt gérés via un type de type IO, tels que les IO de l'effet Cats, et ne sont exécutés que sur une invocation runX explicite et dangereuse, généralement cachée quelque part dans le code de la bibliothèque.
En conséquence, le rejet du résultat d'une expression dans un code purement fonctionnel peut toujours être supposé être une erreur, par exemple
val number = {
discardedExpression // pointless!
42
}C'est une erreur facile et cela peut entraîner des bugs délicats, comme lorsqu'une importante action IO est rejetée involontairement. Le compilateur Scala ne peut pas détecter ce problème car Scala n'est pas un langage purement fonctionnel et ne peut pas supposer que toutes les expressions sont pures.
Ce plugin aborde ce problème en rapportant un avertissement pour chaque expression jetée dont le type est différent de Unit .
Activer le plugin dans build.sbt :
libraryDependencies += compilerPlugin( " com.github.ghik " % " zerowaste " % " <version> " cross CrossVersion .full)Le plugin émet des avertissements, mais c'est souvent une bonne idée de les transformer en erreurs de compilation:
scalacOptions += " -Werror " Notez que ces avertissements, bien qu'ils soient convertis en erreurs, peuvent être supprimés avec l'annotation @nowarn :
import scala . annotation . nowarn
val number = {
discardedExpression : @ nowarn( " msg=discarded expression " )
42
}