计算javascript函数中的语句数

Calculate the number of statements in a javascript function

我想计算 javascript 代码块中的语句数。这是为了评估代码对于编程挑战有多短(如果有 better/easier 评估代码的方法,我也有兴趣听到)。

出于此评估的目的,我想假设语句是能够在其中执行操作的任何内容,例如:

let values = ['test 1', 'test 2'];
for(let i in values) {
    let object = {
        a: i%3,
        b: Math.floor(i/3),
        c: i*2
    };
    let another = {test: 0 || 4};
    let something = values[i];
    let otherSomething = getSomeValues(object[a], object[b]);
    setSomeValues(object[a], object[c]);
    for(let j = 0; j < 5; i++) if(i < j) break;
}

有相当多的语法要涵盖,所以理想情况下,如果有可用的库,我想用它来做——我的谷歌搜索找不到任何非常合适的东西。

我尝试编写一个正则表达式来匹配语句之间所有可能的中断,但这很快就会变得混乱:

[\n;]|\)[ \w]|[{,][\s\w]+:\s*|[{}]

这是我一直在使用的 link 到 the regexr。打破这一点:

我还删除了所有零长度匹配项,因为语句不能为空。

正如我所说,理想情况下我更喜欢图书馆,但我想就我的方法征求一些意见,以及我是否掌握了大部分边缘案例。

由于您试图理解特定的代码块而不是构建库,因此您应该查看 astexplorer.net

Here is a link 显示了经过良好解析的树,如果需要,您可以配置示例以使用替代解析器(babel、acorn、eslint 等)。