有时在进行某些重构时,编译器可能会产生数百个错误。我喜欢从顶部开始解决这些错误,但是大量的错误会让你一直滚动起来非常麻烦。
是否可以让Scala编译器限制它显示的错误数量,以便更容易从顶部开始修复它们?显然是以牺牲可能必须多次运行编译器为代价。
答案 0 :(得分:3)
是的,因为2.12可以使用自定义记者。
这是一个例子记者:
package myrep
import scala.tools.nsc.Settings
import scala.tools.nsc.reporters.ConsoleReporter
import scala.reflect.internal.util._
class MyReporter(ss: Settings) extends ConsoleReporter(ss) {
var deprecationCount = 0
override def warning(pos: Position, msg: String): Unit = {
if (msg contains "is deprecated") deprecationCount += 1
super.warning(pos, msg)
}
override def hasWarnings: Boolean = count(WARNING) - deprecationCount > 0
override def reset() = { deprecationCount = 0 ; super.reset() }
// limit total
var limit = 5
override def display(pos: Position, msg: String, severity: Severity): Unit =
if (severity != ERROR || severity.count <= limit) print(pos, msg, severity)
}
您的记者课必须在工具类路径上:
$ ~/scala-2.12.0-M3/bin/scalac -toolcp . -Xreporter myrep.MyReporter test.scala
您可以选择以某种方式配置限制,可能使用系统属性,但配置不是内置的。
对于此示例文件,有六个错误,但报告了五个:
package tester
@deprecated("Don't use me", since="2.12.0")
class C
object Test extends App {
Console println s"${new C}"
val x: String = 42
val y: Int = "42"
val z: Int = 2.0
Console println (42 drop 1)
Console println (42 take 1)
Console println (42 shift 1)
}