0

我想显示具有超过 3 个 if/for/while/switch/try 语句(与声纳相同)的文件到目前为止我有代码可以遍历整个文件的树和计数语句:

var fs = require('fs');
var esprima = require('esprima');

function traverse(obj, fn) {
    for (var key in obj) {
        if (obj[key] !== null && fn(obj[key]) === false) {
            return false;
        }
        if (typeof obj[key] == 'object' && obj[key] !== null) {
            if (traverse(obj[key], fn) === false) {
                return false;
            }
        }
    }
}

fs.readFile(process.argv[2], function(err, file) {
    var syntax = esprima.parse(file.toString());
    var count = 0;
    traverse(syntax, function(obj) {
        if (obj.type == "TryStatement" || obj.type == "ForStatement" ||
            obj.type == "IfStatement" || obj.type == "WhileStatement"
            obj.type == "SwitchStatement") {
            count++;
        }
    });
    console.log(process.argv[2] + ' ' + count);
});

例如,对于此代码,我如何计算程序中的路径:

try {
    if (foo == 10) {
        for (var i=0; i<foo; ++i) {
            if (i % 5 == 0) {
               var j = i;
               while(j--) {
                   console.log(j);
               }
            }
        }
    }
} catch(e) {
    if (e instanceof Error) {
        if (e.stack) {
            console.log(e.stack);
        }
    }

}

它应该显示 5 和 2 而不是 7。

4

0 回答 0