1

我想在此脚本中找到没有任何父级的调用表达式:

1 + 1

function parent() {
    2 + 2
}

3 + 3

在这里,我想获取1 + 13 + 3节点,但不是2 + 2

我想要实现的是:

j(file.source).find(j.ExpressionStatement, {
    parent: null 
});

那么是否有一个过滤器可以查找表达式是否有父级?

这是一个真实的用例。

4

1 回答 1

4

使用缩进(不安全)

AST 节点的 loc 属性具有缩进属性。如果缩进是0when 可以假设这是一个顶级表达式:

j(file.source).find(j.ExpressionStatement, {
    loc: {indent: 0} 
});

这确实不可靠,因为它取决于缩进。

与第二个过滤器链接

因为我找不到过滤属性的安全方法。我们也可以使用 jscodeshift.filter()来获取父节点。如果是程序,那我们肯定是顶级的:

j(file.source).find(j.ExpressionStatement)
              .filter(path => j.Program.check(path.parent.value));
于 2017-07-18T19:46:26.457 回答