我的大多数JavaScript代码文件都是这样的:
(function() {
var Foo = function() {
...
};
var Bar = function() {
...
};
...
}());
我已经尝试了许多计算代码的圈复杂度的工具,它们都会生成错误的报告(从我的角度来看),也就是说:它们都指向包装函数作为最复杂的函数
这个问题是所有报告都被这个事实严重扭曲:包装函数通常占复杂饼图的一半以上,并且所有平均数都有偏差。
有没有办法获得我的代码的真正的复杂性,而不受包装函数的偏见?
所有这些工具都做错了吗?我做错了将我的代码包装在一个函数中用于作用域(我不这么认为)?使用这些工具我做错了吗?
有人建议在计算复杂性之前删除包装函数,我很乐意这样做,但是有一种可靠的方法可以自动完成吗? 请忽略这个和寻找合适的解决方案。
答案 0 :(得分:3)
我插入了这段代码:
(function()
{
function testFunction(x)
{
var y;
switch (x)
{
case 1:
y = x;
break;
case 2:
y = x * 4;
break;
default:
y = 0;
break;
}
return y;
}
var FooBar = function()
{
// ...
}
}());
它正确地将内部函数testFunction识别为更高的复杂度(5),并且它被包含在具有复杂性(1)的匿名函数中。也适用于声明函数var FooBar = function(){...}看起来像你正在寻找的工具。