Plugin Scala Compiler para detectar expressões não utilizadas (não Unit ).
Zerowaste está atualmente disponível para Scala 2.12.17+, 2.13.10+, 3.2.1+, 3.3.0+ e 3.4.0++
Os plug-ins do compilador devem ser construídos cruzados para todas as versões menores e patches do scala. Se zerowaste não estiver disponível para uma versão do Scala que você deseja usar (provavelmente alguns lançados recém -lançados), registre um problema ou envie um PR.
crossScalaVersions em build.sbtsbt githubWorkflowGeneratebuild.sbt e GitHub A programação funcional pura opera sob o princípio de que as expressões estão livres de efeitos colaterais. Os efeitos colaterais são tratados por meio de um tipo de IO, como o IO da CATS Effect, e são executados apenas com invocação explícita e insegura runX , geralmente ocultas em algum lugar no código da biblioteca.
Como conseqüência, descartar o resultado de uma expressão em código puramente funcional sempre pode ser assumido como um erro, por exemplo
val number = {
discardedExpression // pointless!
42
}Este é um erro fácil e pode levar a bugs complicados, como quando uma ação importante de IO é descartada sem querer. O compilador Scala não pode detectar esse problema, pois o Scala não é uma linguagem puramente funcional e não pode assumir que todas as expressões são puras.
Este plug -in aborda esse problema relatando um aviso para cada expressão descartada cujo tipo é diferente da Unit .
Habilite o plug -in em build.sbt :
libraryDependencies += compilerPlugin( " com.github.ghik " % " zerowaste " % " <version> " cross CrossVersion .full)O plugin emite avisos, mas geralmente é uma boa ideia transformá -los em erros de compilação:
scalacOptions += " -Werror " Observe que esses avisos, apesar de serem convertidos em erros, podem ser suprimidos com a anotação @nowarn :
import scala . annotation . nowarn
val number = {
discardedExpression : @ nowarn( " msg=discarded expression " )
42
}