Blame view

node_modules/estree-walker/src/walker.js 1.09 KB
7820380e   “wangming”   1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  // @ts-check
  /** @typedef { import('estree').BaseNode} BaseNode */
  
  /** @typedef {{
  	skip: () => void;
  	remove: () => void;
  	replace: (node: BaseNode) => void;
  }} WalkerContext */
  
  export class WalkerBase {
  	constructor() {
  		/** @type {boolean} */
  		this.should_skip = false;
  
  		/** @type {boolean} */
  		this.should_remove = false;
  
  		/** @type {BaseNode | null} */
  		this.replacement = null;
  
  		/** @type {WalkerContext} */
  		this.context = {
  			skip: () => (this.should_skip = true),
  			remove: () => (this.should_remove = true),
  			replace: (node) => (this.replacement = node)
  		};
  	}
  
  	/**
  	 *
  	 * @param {any} parent
  	 * @param {string} prop
  	 * @param {number} index
  	 * @param {BaseNode} node
  	 */
  	replace(parent, prop, index, node) {
  		if (parent) {
  			if (index !== null) {
  				parent[prop][index] = node;
  			} else {
  				parent[prop] = node;
  			}
  		}
  	}
  
  	/**
  	 *
  	 * @param {any} parent
  	 * @param {string} prop
  	 * @param {number} index
  	 */
  	remove(parent, prop, index) {
  		if (parent) {
  			if (index !== null) {
  				parent[prop].splice(index, 1);
  			} else {
  				delete parent[prop];
  			}
  		}
  	}
  }