标签: scala-wartremover

在声明案例类时我应该使用final修饰符吗?

根据scala-wartremover静态分析工具,我必须将"final"放在我创建的每个case类的前面:错误消息说"case classes必须是final".

根据scapegoat(Scala的另一个静态分析工具)而不是我不应该(错误消息:"案例类的冗余最终修饰符")

谁是对的,为什么?

static-analysis scala case-class scala-wartremover

50
推荐指数
1
解决办法
9809
查看次数

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

我正在尝试将Wartremover添加到我的Play项目中,但它会在路径文件中报告疣,即使我将其排除.我正在使用Wartremover 0.14和Play Framework 2.4.6.

我的build.sbt中的相关部分:

wartremoverErrors ++= Warts.all
wartremoverExcluded += crossTarget.value / "routes" / "main" / "router" / "Routes.scala"
Run Code Online (Sandbox Code Playgroud)

(请注意,我必须采用与此问题中的答案不同的方式.)

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

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

scala sbt playframework scala-wartremover

4
推荐指数
1
解决办法
766
查看次数

如何避免scala wart中没有包含任何内容的推断类型?

使用scala wart我得到:

  def lastWithRecursion(input: Seq[Int]): Try[Int] = input match {
      case head :: Nil => Success(head)
      case _ :: tail => lastWithRecursion(tail)
      case _ => Failure(new NoSuchElementException("No such element")) // how to avoid inferred type containing nothing.
  }
Run Code Online (Sandbox Code Playgroud)

怎么避免inferred type containing nothing

scala scala-wartremover

3
推荐指数
1
解决办法
936
查看次数

一次性价值 - Scala 中的最佳实践是什么?

WartRemover NonUnitStatements要求不返回单元的语句必须具有赋值。好的,但有时我们不得不使用烦人的 Java API,它们会发生变化并返回一个值,而实际上我们几乎从不关心返回值。

所以我最终尝试了这个:

val _ = mutateSomething(foo)
Run Code Online (Sandbox Code Playgroud)

但是,如果我有多个这些,_实际上是已分配给的合法 val,因此我无法重新分配。Wartremover 也会正确地警告无缘无故的 var-usage,所以我不能只是这样做var _ =

我可以执行以下操作(需要;避免 Scala 认为它是一个继续定义,除非我每次都添加一个完整的换行符)。

;{val _ = mutateSomething(foo)}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

scala scala-wartremover

2
推荐指数
2
解决办法
1186
查看次数