사용하지 않은 표현식 (비 Unit )을 감지하기위한 Scala Compiler 플러그인.
Zerowaste는 현재 Scala 2.12.17+, 2.13.10+, 3.2.1+, 3.3.0+ 및 3.4.0+에서 사용할 수 있습니다.
Scala의 모든 마이너 및 패치 버전에 대해 컴파일러 플러그인을 교차 제작해야합니다. 사용하려는 Scala 버전에서 zerowaste 사용할 수없는 경우 (대부분 신선하게 출시 될 가능성이 높음) 문제를 제출하거나 PR을 제출하십시오.
build.sbt 의 crossScalaVersions 에 추가하십시오sbt githubWorkflowGenerate 실행하십시오build.sbt 및 github 워크 플로의 변경 사항을 커밋하십시오 순수한 기능 프로그래밍은 표현이 부작용이 없다는 원칙에 따라 작동합니다. 부작용은 대신 Cats Effect의 IO와 같은 IO와 같은 유형을 통해 처리되며 일반적으로 라이브러리 코드 어딘가에 숨겨져있는 명시적이고 안전하지 않은 runX 호출시에만 실행됩니다.
결과적으로, 순전히 기능 코드로 표현식의 결과를 버리는 것은 항상 실수라고 가정 할 수 있습니다.
val number = {
discardedExpression // pointless!
42
}이것은 쉬운 실수이며 중요한 IO 동작이 의도하지 않게 폐기 될 때와 같은 까다로운 버그로 이어질 수 있습니다. 스칼라는 순전히 기능적인 언어가 아니며 모든 표현이 순수하다고 가정 할 수 없기 때문에 스칼라 컴파일러는이 문제를 감지 할 수 없습니다.
이 플러그인은 유형이 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
}