我想显示多于3个if / for / while / switch / try语句的文件(与声纳相同)到目前为止我有遍历树的代码和整个文件的count语句:
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。