Scala has no local warning suppression (see e.g. scala/bug/issues/1781 for discussion). This plugin aims to change the situation. The direct motivation for this plugin is to be able to turn on -Xfatal-warnings
option in Scala compiler and enforce zero-warning policy but still be able to consciously silent out warnings which would otherwise be a pointless noise.
If you're using SBT, simply add these lines to your build.sbt
to enable the plugin:
val silencerVersion = "1.2.1"
libraryDependencies ++= Seq(
compilerPlugin("com.github.ghik" %% "silencer-plugin" % silencerVersion),
"com.github.ghik" %% "silencer-lib" % silencerVersion % Provided
)
Silencer currently works with Scala 2.11.4+, 2.12.0+ and 2.13.0-M4+. Also note that since both silencer-plugin
and silencer-lib
are compile time only dependencies, Silencer can also be used in ScalaJS and Scala Native without having to be cross compiled for it.
With the plugin enabled, warnings can be silenced using the @com.github.ghik.silencer.silent
annotation. It can be applied on a single statement or expression, entire def
/val
/var
definition or entire class
/object
/trait
definition.
import com.github.ghik.silencer.silent
@silent class someClass { ... }
@silent def someMethod() = { ... }
someDeprecatedApi("something"): @silent
The @silent
annotation suppresses all warnings in some code fragment. There is currently no way to silent out only specific classes of warnings, like with @SuppressWarnings
annotation in Java.
You can also suppress warnings globally based on a warning message regex. In order to do that, pass this option to scalac
:
scalacOptions += "-P:silencer:globalFilters=[semi-colon separated message patterns]"
Silencer is successfully being used in AVSystem open source and closed projects, e.g. AVSystem Scala Commons Library