Scala中linter和代码覆盖率冲突的默认情况

Scala中linter和代码覆盖率冲突的默认情况,scala,code-coverage,static-analysis,codacy,Scala,Code Coverage,Static Analysis,Codacy,当我在Scala中的模式匹配中没有默认情况时,我的过梁总是抱怨。然而,通常默认情况是人为的,我的程序永远无法达到这种情况 作为一个例子,考虑下面的程序: scala> val x = 1 x: Int = 1 scala> x match { | case 1 => println("yay") | case _ => println("nay") | } yay 很明显,下面的例子实际上是死代码,然而,我的linter仍然会对此抱怨。另

当我在Scala中的模式匹配中没有默认情况时,我的过梁总是抱怨。然而,通常默认情况是人为的,我的程序永远无法达到这种情况

作为一个例子,考虑下面的程序:

scala> val x = 1
x: Int = 1

scala> x match {
     | case 1 => println("yay")
     | case _ => println("nay")
     | }
yay
很明显,下面的例子实际上是死代码,然而,我的linter仍然会对此抱怨。另一方面,我非常理解一种直觉,即匹配整数和不覆盖所有情况都是危险的,但在这种情况下,这显然是不合理的

我是否应该简单地删除这里的默认情况,并抑制linter警告以获得内心的平静

编辑:
有关Codacy请求默认案例的案例数量的详细信息,请参阅。

在示例案例中,if-else可以解决问题。我不知道你的真实情况,但是如果其他的也适用的话


在其他一些情况下,可能只是因为linter不够强大,无法理解不需要默认情况。(顺便说一句,你用的是哪一个?

我实际上在做一个开源项目,所以Codacy对我来说是一个免费的选择:对它所做的事情非常满意。在工作中,我也使用ScalaStyle。另外,codacy和travis似乎相处得很好,特别是当你加入scoverage时。为了评论你的建议,我几乎只在case类上使用模式匹配来区分不同的形状,例如抽象语法树。在那里,我会觉得使用if/else非常困难,因为我必须显式检查类型+手动提取字段等。此外,我希望编译器在优化匹配案例方面比我自己使用if/else做得更好。