Wartremover 仍然在排除的播放路线文件中报告疣

Wartremover still reports warts in excluded Play routes file

我正在尝试将 Wartremover 添加到我的 Play 项目中,但它一直在报告路由文件中的缺陷,即使我将其排除也是如此。我正在使用 Wartremover 0.14 和 Play Framework 2.4.6。

我的相关部分build.sbt:

wartremoverErrors ++= Warts.all
wartremoverExcluded += crossTarget.value / "routes" / "main" / "router" / "Routes.scala"

(请注意,我必须采用与 this question 中建议的答案不同的方式。)

如果没有 wartremoverExcluded 行,Wartremover 会在我的路由文件中报告 13 个错误。有了它,它仍然报告两个:一个关于 Wart.Var,一个关于 Wart.ExplicitImplicitTypes。我也可以排除这些缺点,但使用 Warts.allBut(Wart.Var, Wart.ExplicitImplicitTypes),但我不想这样做,因为这会从我的整个代码库中排除这些缺点,而不仅仅是路由文件。

有没有办法让 Wartremover 停止报告路由文件中的这些缺陷,而不排除每个文件的这些缺陷?

这对我有用:

wartremoverExcluded ++= Seq(
  baseDirectory.value / "target" / "scala-2.11" / "src_managed" / "main" / "routes_routing.scala",
  baseDirectory.value / "target" / "scala-2.11" / "src_managed" / "main" / "routes_reverseRouting.scala"
)

(其实我玩的是2.3,不知道2.4.6是不是一样)

尝试添加这些:

wartremoverExcluded += crossTarget.value / "routes" / "main" / "router" / "Routes.scala"
wartremoverExcluded += crossTarget.value / "routes" / "main" / "router" / "RoutesPrefix.scala"
wartremoverExcluded += crossTarget.value / "routes" / "main" / "controllers" / "ReverseRoutes.scala"
wartremoverExcluded += crossTarget.value / "routes" / "main" / "controllers" / "javascript" / "JavaScriptReverseRoutes.scala"

编辑:距离我第一次写这个答案已经一年多了。 wartremoverExcluded 已从 SettingKey 更改为 TaskKey,因此您可以将上面的内容简化为:

wartremoverExcluded ++= routes.in(Compile).value

对于 sbt 1.4+:

wartremoverExcluded ++= (Compile / routes).value

或者你可以试试这个 sbt plugin I wrote to do it for you