Open
Description
次の2つの場合で、CyclomaticComplexity
の計算結果が変わりました。
for (_ <- ???)
for (i <- ???)
for (_ <- ???)
の方が複雑度が高くなっていますが、
この2つは同じ複雑度としてカウントする方が好ましいと思われます。
for (i <- ???)
の方が意図通りの複雑度となっているようです。
次のコードを実行すると異なる SyntaxTree となることが確認できます。
これは改善の手がかりとなりそうです。
import scala.reflect.runtime.universe._
val expr = reify {
for (_ <- 1 to 2) {
println(s"test")
}
for (i <- 1 to 2) {
println(s"test $i")
}
}
println(show(expr))
println(showRaw(expr))
Expr[Unit]({
Predef.intWrapper(1).to(2).foreach(((x$1) => x$1: @unchecked match {
case _ => Predef.println(StringContext.apply("test").s())
}));
Predef.intWrapper(1).to(2).foreach(((i) => Predef.println(StringContext.apply("test ", "").s(i))))
})
Expr(Block(List(Apply(Select(Apply(Select(Apply(Select(Ident(scala.Predef), TermName("intWrapper")), List(Literal(Constant(1)))), TermName("to")), List(Literal(Constant(2)))), TermName("foreach")), List(Function(List(ValDef(Modifiers(PARAM | SYNTHETIC), TermName("x$1"), TypeTree(), EmptyTree)), Match(Annotated(Apply(Select(New(Ident(scala.unchecked)), termNames.CONSTRUCTOR), List()), Ident(TermName("x$1"))), List(CaseDef(Ident(termNames.WILDCARD), EmptyTree, Apply(Select(Ident(scala.Predef), TermName("println")), List(Apply(Select(Apply(Select(Ident(scala.StringContext), TermName("apply")), List(Literal(Constant("test")))), TermName("s")), List())))))))))), Apply(Select(Apply(Select(Apply(Select(Ident(scala.Predef), TermName("intWrapper")), List(Literal(Constant(1)))), TermName("to")), List(Literal(Constant(2)))), TermName("foreach")), List(Function(List(ValDef(Modifiers(PARAM), TermName("i"), TypeTree(), EmptyTree)), Apply(Select(Ident(scala.Predef), TermName("println")), List(Apply(Select(Apply(Select(Ident(scala.StringContext), TermName("apply")), List(Literal(Constant("test ")), Literal(Constant("")))), TermName("s")), List(Ident(TermName("i")))))))))))