ปลั๊กอินคอมไพเลอร์ Scala เพื่อตรวจจับนิพจน์ที่ไม่ได้ใช้ (ไม่ใช่ Unit )
ปัจจุบัน Zerowaste พร้อมใช้งานสำหรับ Scala 2.12.17+, 2.13.10+, 3.2.1+, 3.3.0+ และ 3.4.0+
ปลั๊กอินคอมไพเลอร์จะต้องสร้างข้ามสำหรับสกาล่าทุกรุ่นและแพตช์ หาก zerowaste ไม่สามารถใช้งานได้สำหรับเวอร์ชัน Scala ที่คุณต้องการใช้ (ส่วนใหญ่ที่ปล่อยออกมาใหม่) โปรดยื่นปัญหาหรือส่ง PR
crossScalaVersions ใน build.sbtsbt githubWorkflowGeneratebuild.sbt และ github การเขียนโปรแกรมฟังก์ชั่นที่บริสุทธิ์ดำเนินการภายใต้หลักการที่นิพจน์ปราศจากผลข้างเคียง ผลข้างเคียงได้รับการจัดการผ่านประเภทที่เหมือน IO เช่น IO ของ Cats Effect และดำเนินการเฉพาะการเรียกใช้ runX ที่ไม่ปลอดภัยอย่างชัดเจนซึ่งมักจะซ่อนอยู่ที่ไหนสักแห่งในรหัสห้องสมุด
เป็นผลให้การทิ้งผลการแสดงออกในรหัสการทำงานอย่างหมดจดอาจถือว่าเป็นความผิดพลาดเช่น
val number = {
discardedExpression // pointless!
42
}นี่เป็นความผิดพลาดที่ง่ายและอาจนำไปสู่ข้อบกพร่องที่ยุ่งยากเช่นเมื่อการกระทำของ IO ที่สำคัญถูกทิ้งโดยไม่ได้ตั้งใจ คอมไพเลอร์สกาล่าไม่สามารถตรวจจับปัญหานี้ได้เนื่องจาก 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
}