func highComplexity(x, y, z int) int {
result := 0
if x > y {
if x > z {
result = x
} else {
result = z
}
} else {
if y > z {
result = y
} else {
result = z
}
}
for i := 0; i < result; i++ {
if i%2 == 0 {
result += i
} else if i%3 == 0 {
result += i * 2
} else if i%5 == 0 {
result += i * 3
} else {
result -= i
}
}
switch {
case result < 100:
return result * 2
case result < 1000:
return result * 3
case result < 10000:
return result * 4
default:
return result
}
}
Output:
~/lint tlin -cfg -func highComplexity testdata/complexity/high.gno
CFG for function highComplexity in file testdata/complexity/high.gno:
digraph mgraph {
mode="heir";
splines="ortho";
"ENTRY" -> "assignment - line 4"
"assignment - line 4" -> "if statement - line 5"
"if statement - line 5" -> "if statement - line 6"
"if statement - line 5" -> "if statement - line 12"
"if statement - line 6" -> "assignment - line 7"
"if statement - line 6" -> "assignment - line 9"
"assignment - line 7" -> "assignment - line 19"
"assignment - line 9" -> "assignment - line 19"
"if statement - line 12" -> "assignment - line 13"
"if statement - line 12" -> "assignment - line 15"
"assignment - line 13" -> "assignment - line 19"
"assignment - line 15" -> "assignment - line 19"
"for loop - line 19" -> "if statement - line 20"
"for loop - line 19" -> "switch statement - line 31"
"assignment - line 19" -> "for loop - line 19"
"increment statement - line 19" -> "for loop - line 19"
"if statement - line 20" -> "assignment - line 21"
"if statement - line 20" -> "if statement - line 22"
"assignment - line 21" -> "increment statement - line 19"
"if statement - line 22" -> "assignment - line 23"
"if statement - line 22" -> "if statement - line 24"
"assignment - line 23" -> "increment statement - line 19"
"if statement - line 24" -> "assignment - line 25"
"if statement - line 24" -> "assignment - line 27"
"assignment - line 25" -> "increment statement - line 19"
"assignment - line 27" -> "increment statement - line 19"
"switch statement - line 31" -> "case clause - line 32"
"switch statement - line 31" -> "case clause - line 34"
"switch statement - line 31" -> "case clause - line 36"
"switch statement - line 31" -> "case clause - line 38"
"case clause - line 32" -> "return statement - line 33"
"return statement - line 33" -> "EXIT"
"case clause - line 34" -> "return statement - line 35"
"return statement - line 35" -> "EXIT"
"case clause - line 36" -> "return statement - line 37"
"return statement - line 37" -> "EXIT"
"case clause - line 38" -> "return statement - line 39"
"return statement - line 39" -> "EXIT"
}
Description
Example
Target Code
Output: