zerowaste
0.2.28
Scala编译器插件可检测未使用的表达式(非Unit )。
当前可用于Scala 2.12.17+,2.13.10+,3.2.1+,3.3.0+和3.4.0+
编译器插件必须针对Scala的每个次要版本和补丁版本进行交叉构建。 zerowaste您要使用的Scala版本(很可能是新鲜发布的),请提交问题或提交PR。
build.sbt中的crossScalaVersionssbt githubWorkflowGeneratebuild.sbt和github工作流的更改纯粹的功能编程根据表达式无副作用的原理运行。相反,副作用是通过类似IO的类型来处理的,例如CATS效果的IO,并且仅在明确的,不安全的runX调用时执行,通常隐藏在库代码中的某个地方。
结果,丢弃纯粹功能代码中表达式的结果始终可以被认为是一个错误,例如
val number = {
discardedExpression // pointless!
42
}这是一个简单的错误,可能会导致棘手的错误,例如,当重要的IO动作无意中丢弃时。 Scala编译器无法检测到此问题,因为Scala不是纯粹的功能语言,也不能假设所有表达式都是纯粹的。
该插件通过报告每个类型与Unit不同的丢弃表达式的警告来解决此问题。
在build.sbt中启用插件:
libraryDependencies += compilerPlugin( " com.github.ghik " % " zerowaste " % " <version> " cross CrossVersion .full)插件发出警告,但通常是一个好主意,将它们变成编译错误:
scalacOptions += " -Werror "请注意,尽管将这些警告转换为错误,但可以通过@nowarn注释来抑制:
import scala . annotation . nowarn
val number = {
discardedExpression : @ nowarn( " msg=discarded expression " )
42
}