计算Javascript每个方法的平均代码行数

时间:2008-09-19 09:12:34

标签: javascript metrics

是否有任何工具可用于计算每种方法的平均代码行数

我想知道每种方法的平均大小,而不仅仅是项目中的总行数。每个方法计数将允许我测量每种方法的简单程度。

这将作为构建过程的一部分进行计算,并显示在仪表板上。我们的想法是,我们可以看到每种方法的平均大小是否在增加。这将标志着代码复杂性增加的可能性,我们可能需要考虑重构。

5 个答案:

答案 0 :(得分:1)

执行递归“for(i in this)”搜索项目,如果对象(i)是函数,则调用“test.toString()。split(”\ n“)。length”。这会计算函数中的换行符数。如果它不是函数,而是对象,则在该对象中调用此函数。还要计算找到的函数数量,然后将换行符的总数除以函数总数,然后得到平均值。

修改

function calculateMethodSize(obj){
  var fcount = 0;
  var fsize = 0;
  for(i in obj){
    if(obj[i] instanceof Function){
      fcount++;
      fsize += obj[i].toString().split(";\n").length;
    }else if(obj[i] instanceof Object){
      var ret = calculateMethodSize(obj[i]);
      fcount += ret.fcount;
      fsize += ret.fsize;
    }
  }
  return {fsize:fsize, fcount:fcount};
}
var data = calculateMethodSize(this);
var average = data.fsize / data.fcount;

小心运行此代码。如果你像这样运行它,那么你可能会得到堆栈溢出(我做了)。

答案 1 :(得分:0)

我不确定是否这样做,但是在你之前的帖子之后搜索了什么是圈复杂度,我去了相关的维基百科页面,它指向Code Analyzer。 他们在那里说:

  

在计算HTML或JSP文件时,它会正确计算LoC   嵌入在< script>中的javascript和vbscript代码标签

我不知道是否按照方法调度此计数,但是可能值得一看(这是一个免费工具)。

答案 2 :(得分:0)

简短快速和脏:grep为“;”,计算行数,这将给出估计语句数。

答案 3 :(得分:0)

将行定义为“\ n”或“;”,

您可以尝试使用以下简单算法:

FOR each line in a javascript file (or chunk of text)
    IF the line starts with "function " THEN
        PUSH the first left-curly brace you find onto a stack
        WHILE the stack is non-empty
            PUSH any left-curly braces in the current line
            POP any left-curly braces when you encounter a right-curly brace
            Increment your line-count by 1
            Increment your line counter (as mentioned in the FOR loop above)
        END WHILE
        Store your total lines for this function            
     ELSE
         //ignore the line because it's probably a global var or blank
     END IF
END FOR

我不知道可以自动执行此操作的工具。但是,尝试自己制作一个会很有趣。

答案 4 :(得分:0)

您可能也希望了解其他指标。无论如何计算线条, 只要确保在没有“function”关键字或花括号的情况下定义的函数不会出现问题。现实世界的例子:

var negate = bind1st(compose, not);

(这里否定是一个由函数bind1st构建的函数,compose而不是)