zerowaste
0.2.28
未使用の式(非Unit )を検出するためのScalaコンパイラプラグイン。
Zerowasteは現在、SCALA 2.12.17+、2.13.10+、3.2.1+、3.3.0+、および3.4.0+で利用できます。
コンパイラプラグインは、SCALAのマイナーバージョンとパッチバージョンごとにクロス構築する必要があります。 zerowaste使用したいSCALAバージョン(おそらく新たにリリースされたもの)に利用できない場合は、問題を提出するか、PRを提出してください。
build.sbtのcrossScalaVersionsに目的のScalaバージョンを追加しますsbt githubWorkflowGenerateを実行しますbuild.sbtおよびgithubワークフローの変更をコミットします純粋な機能プログラミングは、式には副作用がないという原則の下で機能します。代わりに、Cats EffectのIOなどの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
}