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
}