Complemento del compilador Scala para detectar expresiones no utilizadas (no Unit ).
Zerowaste está actualmente disponible para Scala 2.12.17+, 2.13.10+, 3.2.1+, 3.3.0+ y 3.4.0+
Los complementos del compilador deben estar formados por cada versión menor y de parche de Scala. Si zerowaste no está disponible para una versión de Scala que desea usar (muy probablemente algo recién publicado), presente un problema o envíe un PR.
crossScalaVersions en build.sbtsbt githubWorkflowGeneratebuild.sbt y GitHub La programación funcional pura funciona bajo el principio de que las expresiones están libres de efectos secundarios. En cambio, los efectos secundarios se manejan a través de un tipo similar a IO, como el IO del efecto de Cats, y solo se ejecutan en invocación runX explícita e insegura, generalmente oculta en algún lugar del código de la biblioteca.
Como consecuencia, siempre se puede suponer que descartar el resultado de una expresión en un código puramente funcional es un error
val number = {
discardedExpression // pointless!
42
}Este es un error fácil y puede conducir a errores difíciles, como cuando una acción importante de IO se descarta involuntariamente. El compilador de Scala no puede detectar este problema ya que Scala no es un lenguaje puramente funcional y no puede asumir que todas las expresiones son puras.
Este complemento aborda este problema al informar una advertencia para cada expresión descartada cuyo tipo es diferente al de Unit .
Habilite el complemento en build.sbt :
libraryDependencies += compilerPlugin( " com.github.ghik " % " zerowaste " % " <version> " cross CrossVersion .full)El complemento emite advertencias, pero a menudo es una buena idea convertirlas en errores de compilación:
scalacOptions += " -Werror " Tenga en cuenta que estas advertencias, a pesar de convertirse en errores, pueden suprimirse con la anotación @nowarn :
import scala . annotation . nowarn
val number = {
discardedExpression : @ nowarn( " msg=discarded expression " )
42
}