Плагин компилятора Scala для обнаружения неиспользуемых выражений (не Unit ).
Zerowaste в настоящее время доступен для Scala 2.12.17+, 2.13.10+, 3.2.1+, 3.3.0+ и 3.4.0+
Плагины компилятора должны быть построены для каждой несовершеннолетней и патч-версии Scala. Если zerowaste не доступен для версии Scala, которую вы хотите использовать (скорее всего, какой -то недавно выпущенный), пожалуйста, подайте проблему или отправьте PR.
crossScalaVersions в build.sbtsbt githubWorkflowGeneratebuild.sbt и GitHub Чистое функциональное программирование работает в соответствии с принципом, что выражения свободны от побочных эффектов. Вместо этого побочные эффекты обрабатываются через IO-подобный тип, такой как IO Cats Effect, и выполняются только при явном, небезопасном вызове runX , обычно скрытого где-то в коде библиотеки.
Как следствие, отбрасывание результата выражения в чисто функциональном коде всегда можно предположить, что это ошибка, например
val number = {
discardedExpression // pointless!
42
}Это легкая ошибка, и это может привести к хитрым ошибкам, например, когда важное действие ввода времени непреднамеренно отброшено. Компилятор 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
}