Closed dujuncheng closed 5 years ago
第一版修改 by djc
walk(ast: Node, { enter(node: Node, parent: Node, prop: string, index: number)?: void, leave(node: Node, parent: Node, prop: string, index: number)?: void })
walk 函数提供了一种方法,可以通过编译器自己内置的 estree-walker 实例来遍历解析器生成的抽象语法树的方法。
walk
const svelte = require('svelte/compiler'); svelte.walk(ast, { enter(node, parent, prop, index) { do_something(node); if (should_skip_children(node)) { this.skip(); } }, leave(node, parent, prop, index) { do_something_else(node); } });
遍历器需要传入一个抽象语法树以及一个对象(包含可选的两个方法:enter 和 leave)。对于每个节点,enter 会被调用(如果传入的对象中存在这个方法的话)。 接下来,该节点的每个子节点都会被遍历(除非在 enter 方法中调用 this.skip() 方法)。 遍历完成后,leave 方法会在这个节点上被调用。
enter
leave
第一版修改 by djc
walk
函数提供了一种方法,可以通过编译器自己内置的 estree-walker 实例来遍历解析器生成的抽象语法树的方法。遍历器需要传入一个抽象语法树以及一个对象(包含可选的两个方法:
enter
和leave
)。对于每个节点,enter
会被调用(如果传入的对象中存在这个方法的话)。 接下来,该节点的每个子节点都会被遍历(除非在enter
方法中调用 this.skip() 方法)。 遍历完成后,leave
方法会在这个节点上被调用。