Scala Compiler-Plugin zum Erkennen von unbenutzten Ausdrücken (Nicht- Unit ).
ZeroWaste ist derzeit für Scala 2.12.17+, 2.13.10+, 3.2.1+, 3.3.0+ und 3.4.0+ erhältlich
Compiler-Plugins müssen für jede Minor- und Patch-Version von Scala gekrönt sein. Wenn zerowaste für eine Skala -Version, die Sie verwenden möchten, nicht verfügbar ist (höchstwahrscheinlich frisch veröffentlicht), stellen Sie bitte ein Problem ein oder senden Sie eine PR.
crossScalaVersions in build.sbtsbt githubWorkflowGenerate ausbuild.sbt und GitHub -Workflows Reine funktionelle Programmierung funktioniert unter dem Prinzip, dass Ausdrücke frei von Nebenwirkungen sind. Nebenwirkungen werden stattdessen durch einen IO-ähnlichen Typ wie das IO von Cats Effect behandelt und nur bei explizitem, unsicherem runX Aufruf ausgeführt, der normalerweise irgendwo im Bibliothekscode versteckt ist.
Infolgedessen kann immer angenommen werden, dass ein Ergebnis eines Ausdrucks in rein funktionellem Code ein Fehler ist, z. B.
val number = {
discardedExpression // pointless!
42
}Dies ist ein einfacher Fehler und kann zu kniffligen Fehlern führen, z. B. wenn eine wichtige IO -Aktion unbeabsichtigt verworfen wird. Der Scala -Compiler kann dieses Problem nicht erkennen, da Scala keine rein funktionale Sprache ist und nicht davon ausgehen kann, dass alle Ausdrücke rein sind.
Dieses Plugin befasst sich mit diesem Problem, indem er eine Warnung für jeden weggeworfenen Ausdruck meldet, dessen Typ sich von Unit unterscheidet.
Aktivieren Sie das Plugin in build.sbt :
libraryDependencies += compilerPlugin( " com.github.ghik " % " zerowaste " % " <version> " cross CrossVersion .full)Das Plugin gibt Warnungen aus, aber es ist oft eine gute Idee, sie in Kompilierungsfehler zu verwandeln:
scalacOptions += " -Werror " Beachten Sie, dass diese Warnungen, obwohl sie in Fehler umgewandelt wurden, mit der @nowarn -Annotation unterdrückt werden können:
import scala . annotation . nowarn
val number = {
discardedExpression : @ nowarn( " msg=discarded expression " )
42
}