57

我想知道 scala 是否有一个等效于 java 的@SuppressWarnings可以应用于函数或忽略该函数发出的任何弃用警告[1] 的东西?

1:就我而言,相关警告是:method stop in class Thread is deprecated: see corresponding Javadoc for more information.我知道 stop 的问题,但仍有一些情况由于遗留代码我们必须使用它。

4

4 回答 4

30

不,针对此类功能的增强请求 [1] 已关闭为wontfix.

我同意这会很有用。我希望 Scala 核心团队不会反对这个想法,但他们拥有有限的资源和许多更高的优先级。

更新:此功能最终在 2020 年 4 月 22 日的 scala 2.13.2 版本中实现,请参阅此答案

[1] https://issues.scala-lang.org/browse/SI-1781

于 2010-08-17T20:18:18.290 回答
26

编辑:你应该使用@nowarn


为此有一个简单的编译器插件:消音器(有点不要脸的插件)

于 2015-07-15T18:59:47.323 回答
16

Scala 2.13.2 提供@nowarn了在 ghik 的基础上开发的注解silencer,例如

import scala.annotation.nowarn
def t = { 0: @nowarn; 1 }

不发出警告,而

def t = { 0; 1 }

warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
  def t = { 0; 1 }
            ^
于 2020-03-04T14:45:40.830 回答
-2

以下是如何抑制 sbt 中的所有警告:

import sbt._
import Keys._
import KeyRanks.DTask
import xsbti.{Reporter, Problem, Position, Severity}

private lazy val compilerReporter = TaskKey[xsbti.Reporter](
  "compilerReporter",
  "Experimental hook to listen (or send) compilation failure messages.",
  DTask
)

val ignoreWarnings = Seq(
  compilerReporter in (Compile, compile) :=
    new xsbti.Reporter {
      private val buffer = collection.mutable.ArrayBuffer.empty[Problem]
      def reset(): Unit = buffer.clear()
      def hasErrors: Boolean = buffer.exists(_.severity == Severity.Error)
      def hasWarnings: Boolean = buffer.exists(_.severity == Severity.Warn)
      def printSummary(): Unit = {

        print("\033c")
        if (problems.nonEmpty) {
          problems.foreach{ p =>
            println("=====================================================")
            println(p.position)
            println(p.message)
            println()
            println()
          }
        }
      }
      def problems: Array[Problem] = buffer.toArray

      def log(problem: Problem): Unit = {
        if (problem.severity == Severity.Error) {
          buffer.append(problem)
        }
      }
      def log(pos: Position, msg: String, sev: Severity): Unit = {
        log(new Problem {
          def category: String = "foo"
          def severity: Severity = sev
          def message: String = msg
          def position: Position = pos
        })
      }
      def comment(pos: xsbti.Position, msg: String): Unit = ()
    }
)
于 2018-07-11T21:39:58.230 回答