如何让ast-grep规则仅匹配最外层对象而非内部对象?
用ast-grep实现仅匹配最外层对象
可以通过ast-grep的stopBy配置实现仅匹配最外层对象,避免匹配嵌套的内部对象。
规则配置
rule: pattern: const obj = {$$$} kind: object stopBy: kind: object
测试源代码
const obj = { a: 1, b: { c: 1 } } const obj2 = { d: 1, e: { f: 1 }, g: { h: 0 } }
预期匹配结果
// match 1
{
a: 1,
b: {
c: 1
}
}// match 2
{
d: 1,
e: {
f: 1
},
g: {
h: 0
}
}
原理说明
stopBy的作用是:当ast-grep遍历AST结构时,一旦遇到指定类型(这里是object)的节点,就停止向下深入匹配。这样就能确保只捕获最外层的对象节点,不会误匹配内部嵌套的子对象。
内容的提问来源于stack exchange,提问作者Peigoz
相关产品推荐
相关产品推荐

