svelte.walk

  1. walk(ast: Node, {
  2. enter(node: Node, parent: Node, prop: string, index: number)?: void,
  3. leave(node: Node, parent: Node, prop: string, index: number)?: void
  4. })

walk 函数提供了一种方法,可以通过编译器自己内置的 estree-walker 实例来遍历解析器生成的抽象语法树的方法。

  1. const svelte = require('svelte/compiler');
  2. svelte.walk(ast, {
  3. enter(node, parent, prop, index) {
  4. do_something(node);
  5. if (should_skip_children(node)) {
  6. this.skip();
  7. }
  8. },
  9. leave(node, parent, prop, index) {
  10. do_something_else(node);
  11. }
  12. });

遍历器需要传入一个抽象语法树以及一个对象(包含可选的两个方法:enterleave)。对于每个节点,enter 会被调用(如果传入的对象中存在这个方法的话)。 接下来,该节点的每个子节点都会被遍历(除非在 enter 方法中调用 this.skip() 方法)。 遍历完成后,leave 方法会在这个节点上被调用。