有一个名为wartremover的编译器插件,它提供了你想要的东西. https://github.com/typelevel/wartremover
它有一些错误消息和一些scala函数的警告,应该避免安全.
这是来自github自述文件页面的OptionPartial wart的描述:
scala.Option有一个get方法,如果值是,将抛出None.应重构该程序以用于scala.Option#fold显式处理Some和None案例.
要将wartremover作为插件添加到scalac,您需要将其添加到您的project/plugins.sbt:
resolvers += Resolver.sonatypeRepo("releases")
addSbtPlugin("org.brianmckenna" % "sbt-wartremover" % "0.11")
Run Code Online (Sandbox Code Playgroud)
并在您的build.sbt:中激活它:
wartremoverErrors ++= Warts.unsafe
Run Code Online (Sandbox Code Playgroud)
https://github.com/typelevel/wartremover/blob/master/OTHER-WAYS.md描述了如何使用插件的其他方法,其中一个使用它作为宏,如问题中所述.
将疣去除剂作为库添加到您的build.sbt:
resolvers += Resolver.sonatypeRepo("releases")
libraryDependencies += "org.brianmckenna" %% "wartremover" % "0.11"
Run Code Online (Sandbox Code Playgroud)
你可以把任何疣变成一个宏,就像这样:
scala> import language.experimental.macros
import language.experimental.macros
scala> import org.brianmckenna.wartremover.warts.Unsafe
import org.brianmckenna.wartremover.warts.Unsafe
scala> def safe(expr: Any):Any = macro Unsafe.asMacro
safe: (expr: Any)Any
scala> safe { 1.some.get }
<console>:10: error: Option#get is disabled - use Option#fold instead
safe { 1.some.get }
Run Code Online (Sandbox Code Playgroud)
该示例改编自wartremover github页面.