无穷无尽的比赛,例如
def foo[A](t: Seq[A]) = t match {
Seq(x) => x
}
通常(并不总是,但通常)是我在运行时崩溃的错误。 Scala警告说,但是在增量构建中,文件可能已经编译好了,所以我会错过警告。
是否有一种方法,全局或本地(可能是注释)强制scala将警告转换为错误?
答案 0 :(得分:3)
可以提供一个自定义报告器,任意将警告报告为错误(或相反),但API当前是基于字符串的,因此它会过滤字符串消息而不是键入警告。
没有内置方法可以对特定警告进行失败,但-Xlint -Xfatal-warnings
是升级警告的常用方法。
已请求警告抑制,但被视为危险。有了致命的警告,要求就是禁止被认为是良性的警告。
如果您有剩余弃用,则可以通过从不推荐使用的方法调用警告来抑制警告(在-Xfatal-warnings下会失败);如果该方法是本地方法,则不会生成警告。
scala> @deprecated("","") def f = 8
f: Int
scala> f
<console>:9: warning: method f is deprecated:
f
^
scala> object A {
| def a = {
| @deprecated("","") def _f = f
| _f
| }}
defined object A
scala> A.a
res1: Int = 8
本地弃用技巧本身已被弃用,但您仍然可以使用转发合作伙伴:
scala> @deprecated("","") def f = 8
f: Int
scala> f
warning: there was one deprecation warning; re-run with -deprecation for details
res0: Int = 8
scala> @deprecated("","") class C { def g = f }; object C extends C
defined class C
defined object C
scala> C.g
res1: Int = 8
答案 1 :(得分:0)
考虑询问有关构建过程的问题。
您应该在代码提交/签入之前立即执行完整,干净的构建(非增量)并运行单元测试。这是为了避免(潜在的,剩余的)SBT或您的构建过程中的错误。当然,您应该监控错误和警告的结果。
您或者您应该做持续集成(自动,预定的构建/测试)吗?在这种情况下,您可以拥有或引入一些控制警告的处理方式(忽略或触发构建失败/警告)。
我没有看到从scalac
命令行执行此操作的方法。如果所有其他方法都不能满足您的需求,那么请考虑作为最后的手段,然后仅在适合您的构建工具时:为scalac
创建一个包装脚本,也称为scalac
:
scalac