Scala 是否可以限制编译器显示的错误数?

Scala 是否可以限制编译器显示的错误数?,scala,Scala,有时,在执行某些类型的重构时,编译器可能会生成数百个错误。我喜欢从顶部开始解决这些错误,但是错误的数量之多会使一直滚动到上一步非常麻烦 有没有可能让Scala编译器限制它显示的错误数量,以便更容易从顶部开始修复它们?显然,这是以可能需要多次运行编译器为代价的。是的,因为可以使用自定义报告器 以下是一个示例记者: package myrep import scala.tools.nsc.Settings import scala.tools.nsc.reporters.ConsoleReport

有时,在执行某些类型的重构时,编译器可能会生成数百个错误。我喜欢从顶部开始解决这些错误,但是错误的数量之多会使一直滚动到上一步非常麻烦

有没有可能让Scala编译器限制它显示的错误数量,以便更容易从顶部开始修复它们?显然,这是以可能需要多次运行编译器为代价的。

是的,因为可以使用自定义报告器

以下是一个示例记者:

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)
}
您可以选择以某种方式配置限制,可能是使用系统属性,但配置不是内置的

对于此示例文件,有六个错误,但报告了五个错误:

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)
}

你考虑过使用IDE来帮助你重构吗?@Song,我确实使用IDE。不过,IDE并不支持人们可能希望进行的所有重构。在本例中,我将虚假的mixin特征(它们只包含常量)转换为对象,Intellij对此没有重构。如果你知道一个IDE可以,请告诉我。哦,除了更改类的包/名称之外,我不太关心大多数IDE重构功能。这很有用,因为它们可以在创建问题后很快突出显示您在哪些文件中引入了问题。
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)
}