javascript:包装函数的圈复杂度

标签 javascript jshint cyclomatic-complexity

我的大多数 javascript 代码文件如下所示:

(function() {
  var Foo = function() {
    ...
  };

  var Bar = function() {
    ...
  };

  ...
}());

我尝试了很多计算代码圈复杂度的工具,它们都生成了错误的报告(从我的 Angular 来看),即:它们都将包装函数作为最复杂的函数.

问题是所有的报告都被这个事实严重扭曲了:包装函数通常占据了复杂性饼图的一半以上,而且所有的平均数都是有偏差的。

有没有办法获得我的代码的真实复杂性,而不会受到包装函数的影响?

所有这些工具都做错了吗?将我的代码包装在一个函数中以进行范围界定是我做错了吗(我不这么认为)?我在使用这些工具时做错了吗?

编辑

有人建议在计算复杂度之前删除包装函数,我很乐意这样做,但是有可靠的方法自动完成吗?请忽略这个并寻求适当的解决方案。

最佳答案

您可以使用 jsmeter.herokuapp.com在线或在 jsmeter-online 查看源代码使用 jsmeter通过诺亚彼得斯

我插入了这段代码:

(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(){...}

看起来像您正在寻找的工具。


已弃用:jsmeter.info 的存档- 看起来当前域是垃圾邮件

关于javascript:包装函数的圈复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335242/

相关文章:

node.js - 删除自动生成的 scsslint_tmp 文件?

testing - 如何计算圈复杂度?

java - 使用 jar 文件的循环复杂度

javascript - token "."出现语法错误,jshint 中此 token 后应有标识符

javascript - 访问 JSON 字符串值

javascript - 查找要上传文件的路径

javascript - 在 javascript 函数中使用选择器 "$(this).find()"jQuery

javascript - JsHint 警告 : A regular expression literal can be confused with '/='

java - 如何通过重构代码来降低环复杂度?

javascript - 提交后重定向到同一页面