有没有可用于计算JavaScript中圈复杂度的工具?
在处理服务器端代码时,我发现这是一个非常有用的指标,并希望能够将其应用于编写的客户端JavaScript。
有没有可用于计算JavaScript中圈复杂度的工具?
在处理服务器端代码时,我发现这是一个非常有用的指标,并希望能够将其应用于编写的客户端JavaScript。
我参与了编写一款用于对JavaScript项目进行软件复杂度分析的工具:
它会报告一堆不同的复杂度指标:代码行数、参数数量、圈复杂度、圈复杂度密度、Halstead复杂度量、可维护性指数、一阶密度、变更成本和核心大小。
它以MIT许可证发布,使用Node.js和Esprima JavaScript解析器构建。可以通过npm安装,方法如下:
npm i -g complexity-report
为了全面回答这个问题,我曾经搜索过同样的工具,但没有找到一个能够很好地进行可视化的工具,所以我写了 plato
以下是示例报告:
它使用了Phil's complexity-report(上面提到过),并从jshint(和其他工具)中聚合数据。
JSHint 最近 增加了对代码度量计算的支持。
你可以设置以下最大值:
maxparams
- 允许的形式参数个数maxdepth
- 代码块允许的嵌套深度maxstatements
- 每个函数允许的语句数maxcomplexity
- 最大圈复杂度(Cyclomatic Complexity)每个函数允许的最大形式参数个数
/*jshint maxparams:3 */
function login(request, onSuccess) {
// ...
}
// JSHint: Too many parameters per function (4).
function logout(request, isManual, whereAmI, onSuccess) {
// ...
}
/*jshint maxdepth:2 */
function main(meaning) {
var day = true;
if (meaning === 42) {
while (day) {
shuffle();
if (tired) { // JSHint: Blocks are nested too deeply (3).
sleep();
}
}
}
}
每个函数允许的最大语句数
/*jshint maxstatements:4 */
function main() {
var i = 0;
var j = 0;
// Function declarations count as one statement. Their bodies
// don't get taken into account for the outer function.
function inner() {
var i2 = 1;
var j2 = 1;
return i2 + j2;
}
j = i + j;
return j; // JSHint: Too many statements per function. (5)
}