如何使用esprima计算if / for / while / switch / try语句的数量

时间:2016-05-25 12:52:53

标签: javascript esprima

我想显示多于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。

0 个答案:

没有答案